模式匹配的自定义类型
问题描述:
考虑以下几种类型:模式匹配的自定义类型
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
。这个问题一般是关于模式匹配,而不是这个特定的例子。
坦克的任何帮助。
答
但它应该暗示它们必须是相同的。我不在这里?
只是说哈斯克尔不允许这样做。一些模式匹配的语言(例如Erlang),其他语言不会(Haskell,OCaml,Scala)。
抱歉没有看到...这些回答我的问题...(现在不能删除,因为答案) – Chris