Функция Haskell, которая принимает тип и значение и проверяет, имеет ли значение этот тип

Я пытаюсь создать простой интерпретатор схемы на Haskell. В рамках этого я реализую некоторые примитивные операторы, такие как число ?, строка? и т.д.

У меня есть такой код:

isNumber :: [LispVal] -> LispVal
isNumber ([Number n]) = Bool True
isNumber            _ = Bool False

isString :: [LispVal] -> LispVal
isString ([String n]) = Bool True
isString            _ = Bool False

И я бы хотел что-то вроде

isType :: ?? -> [LispVal] -> LispVal
isType (typeName [typeName n]) = Bool True
isType                       _ = Bool False

Другими словами, я хотел бы создать эквивалент isNumber, сказав «isType Number». Возможно ли это как-нибудь? Я изо всех сил пытаюсь найти что-то подобное в Google, возможно, потому, что не знаю, как назвать ситуацию.

10
задан Daniel Eliasson 21 January 2012 в 23:24
поделиться