【问题标题】:Patternmatching in custom types [duplicate]自定义类型中的模式匹配
【发布时间】: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’

但它应该暗示它们必须相同。我在这里没有得到什么?

注意:我知道我可以给它们不同的名称,然后在函数体中比较 v1v2。这个问题是关于一般的模式匹配,而不是这个具体的例子。

坦克寻求任何帮助。

【问题讨论】:

  • 抱歉没看到……这些回答了我的问题……(因为回答,现在不能删除)

标签: haskell pattern-matching


【解决方案1】:

但它应该暗示它们必须相同。我在这里没有得到什么?

只是 Haskell 不允许这样做。一些具有模式匹配的语言可以(例如 Erlang),而另一些则没有(Haskell、OCaml、Scala)。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2018-08-19
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多