Предполагая, что вы действительно имели в виду тип сравнение, простой ответ «вы не можете». Haskell статически типизирован, поэтому проверка выполняется во время компиляции, а не во время выполнения. Так что, если у вас есть функция, как это:
foo :: Fruit -> Bool
foo Apple = True
foo x = False
Ответ или нет x
плод всегда будет «да».
Возможно, вы пытаетесь выяснить, с какими конструкторами данных было построено заданное значение. Чтобы сделать это, используйте поиск по шаблону:
fruitName :: Fruit -> String
fruitName Fruit = "Fruit"
fruitName Apple = "Apple"
fruitName Orange = "Orange"
Кстати, если вы используете GHCI, и вы хотите знать, тип чего-либо, используйте :t
> let a = 123
> :t a
a :: Integer
>
Я был бы заинтересован в зная, почему вы этого хотите. – sclv 2010-11-25 19:43:17
@sclv: Учитывая указанную выше программу, Apple возвращает True. a == Фрукты возвращаются False. Я просто хочу знать, как я говорю, является ли какая-то переменная плодом. Ничего сложного. Apple == Fruit также возвращает false. Возможно, это запутанно, потому что конструктор данных и типов имеет одно и то же имя. Хорошо, поэтому замените данные Fruit на данные FruitType ..., я до сих пор не могу найти способ сделать какой-то контроль, связанный с FruitType. – 2010-11-25 21:34:46