2017-04-12 120 views
0

考慮以下幾種類型:模式匹配的自定義類型

data MyType = MyType Val Col deriving (Eq, Show) 
data Val = Val A | B | C deriving (Eq, Ord, Show, Read) 
data Col = X | Y | Z deriving (Eq, Ord, Show, Read) 

如果我現在有喜歡sameVal :: MyType -> MyType -> Bool一個功能,應該檢查Val領域的平等,並嘗試做這樣的:

sameVal (MyType v _) (MyType v _) = True 
sameVal _ _ = False 

我GHC哼唧告訴我,v有衝突的定義...

Conflicting definitions for ‘v’ 
Bound at: htest.hs:6:14 
      htest.hs:6:24 
In an equation for ‘sameVal’ 

但它應該暗示它們必須是相同的。我不在這裏?

注意:我明白了,我可以給他們不同的名字,並在後面的函數體中比較v1v2。這個問題一般是關於模式匹配,而不是這個特定的例子。

坦克的任何幫助。

+0

抱歉沒有看到...這些回答我的問題...(現在不能刪除,因爲答案) – Chris

回答

3

但它應該暗示它們必須是相同的。我不在這裏?

只是說哈斯克爾不允許這樣做。一些模式匹配的語言(例如Erlang),其他語言不會(Haskell,OCaml,Scala)。

相關問題