我还在学习Haskell的基础知识,我试图找到这个简单问题的答案,所以我提前道歉,因为我确信这很简单。
假设:
data Fruit = Fruit| Apple | Orange
deriving (Show, Eq)
a = Apple
如何检查某些是否是水果?
答案 0 :(得分:12)
假设你真的想要类型比较,简单的答案是“你不能”。 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
>