2017-04-12 78 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)。

相关问题