Я пытаюсь сделать простой интерпретатор Схемы в Haskell. Как часть этого, я реализую некоторые примитивные операторы типа number?, string? и др.
У меня такой код:
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, может быть, потому, что я не знаю, как назвать ситуацию.