嵌套数据构造函数的模式匹配

时间:2018-03-20 05:28:41

标签: haskell pattern-matching algebraic-data-types

对于以下代码,我继续收到编译器错误,因为我正在编写(List _)并且它正在尝试对列表进行模式匹配。我该如何解决这个问题?

data List a = Cons a (List a) | Empty

instance Monad List where
    Empty >>= _ = Empty 
    Cons x (List _) >>= f = f x

1 个答案:

答案 0 :(得分:7)

data List a = Cons a (List a) | Empty

这定义了一个类型构造函数 List,其中包含两个数据构造函数 ConsEmptyCons有两个字段,一个是a类型,另一个是List a类型,可以是EmptyCons,等等。

所以当你写:

Cons x (List _) >>= f = f x

编译器正在寻找一个名为List data 构造函数来进行模式匹配,并且没有一个 - 因此错误。如果您只想忽略该字段,请写:

Cons x _ >>= f = f x

现在当然这不是Monad的正确List实例 - 它更像是Maybe的实例 - 但我会让你自己解决这个问题