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