在Haskell中进行类型比较

时间:2010-11-25 04:22:41

标签: haskell

我还在学习Haskell的基础知识,我试图找到这个简单问题的答案,所以我提前道歉,因为我确信这很简单。

假设:

data Fruit = Fruit| Apple | Orange
    deriving (Show, Eq)

a = Apple

如何检查某些是否是水果?

1 个答案:

答案 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
>