Предполагая, что вы действительно имели в виду сравнение type , простой ответ - «вы не можете». Haskell статически типизирован, поэтому проверка выполняется во время компиляции, а не во время выполнения. Итак, если у вас есть такая функция:
foo :: Fruit -> Bool
foo Apple = True
foo x = False
Ответ на вопрос, является ли f4] плодом, всегда будет «да».
пытаясь выяснить, какой конструктор данных сконструировал заданное значение. Для этого используйте сопоставление с образцом:
fruitName :: Fruit -> String
fruitName Fruit = "Fruit"
fruitName Apple = "Apple"
fruitName Orange = "Orange"
Кстати, если вы используете GHCi и хотите узнать тип чего-то, используйте :t
> let a = 123
> :t a
a :: Integer
>