【发布时间】:2017-04-12 06:00:34
【问题描述】:
考虑以下类型:
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’
但它应该暗示它们必须相同。我在这里没有得到什么?
注意:我知道我可以给它们不同的名称,然后在函数体中比较 v1 和 v2。这个问题是关于一般的模式匹配,而不是这个具体的例子。
坦克寻求任何帮助。
【问题讨论】:
-
抱歉没看到……这些回答了我的问题……(因为回答,现在不能删除)