türünde olup olmadığını kontrol eder Haskell'de basit bir Scheme yorumlayıcısı yapmaya çalışıyorum. Bunun bir parçası olarak, sayı gibi bazı ilkel operatörleri uyguluyorum, string? vbHaskell işlevi bir tür ve bir değer alır ve değerin
bu gibi bir kod vardır:
isNumber :: [LispVal] -> LispVal
isNumber ([Number n]) = Bool True
isNumber _ = Bool False
isString :: [LispVal] -> LispVal
isString ([String n]) = Bool True
isString _ = Bool False
Ya İsterdim ben tarafından ISNUMBER eşdeğer oluşturmak istiyorum, başka deyişle
isType :: ?? -> [LispVal] -> LispVal
isType (typeName [typeName n]) = Bool True
isType _ = Bool False
gibi bir şey "isType Numarası". Bu bir şekilde mümkün mü? Google’da benzer bir şey bulmaya çalışıyorum, belki de durumu nasıl arayacağımı bilmiyorum.
Muhtemelen yazdığı gibi, bu sorunun Haskell bağlamında anlam ifade etmediğinden, muhtemelen "tür" yerine "yapıcı" demelisiniz. Haskell kurucuları ile Lisp türlerini temsil ediyorsunuz, ancak bu sonuçla sonuçlanan Haskell sorusuyla doğrudan alakalı değil. – ehird
Data.Typeable bir göz atmaya değer olabilir, ancak burada dinamik kontrollere ihtiyacınız olduğu görünmüyor. – ExternalReality
[Şablon Haskell çözümü] için buraya bakın (http://stackoverflow.com/questions/7213974/how-to-examine-a-quoted-data-constructor-name-in-template-haskell/7214422#7214422). Bununla, 'isNumber = $ (isA 'Number)' – hammar