2
我还在学习Haskell的基础知识,我试图找到这个简单问题的答案,所以我提前道歉,因为我确信它很简单。Haskell中的类型比较
考虑:
data Fruit = Fruit| Apple | Orange
deriving (Show, Eq)
a = Apple
如何检查是否存在一个是果?
我还在学习Haskell的基础知识,我试图找到这个简单问题的答案,所以我提前道歉,因为我确信它很简单。Haskell中的类型比较
考虑:
data Fruit = Fruit| Apple | Orange
deriving (Show, Eq)
a = Apple
如何检查是否存在一个是果?
假设你的意思是类型比较,简单的答案是“你不行”。 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。 ==水果返回False。我只想知道我是如何告诉如果某个变量是一个水果。没什么复杂。 Apple == Fruit也返回false。也许这很令人困惑,因为数据和类型构造函数都是相同的名称。好的,所以用数据FruitType替换数据Fruit,我仍然无法找到某种方式来检查a是否与FruitType相关。 – 2010-11-25 21:34:46