对于以下代码,我继续收到编译器错误,因为我正在编写(List _)并且它正在尝试对列表进行模式匹配。我该如何解决这个问题?
data List a = Cons a (List a) | Empty
instance Monad List where
Empty >>= _ = Empty
Cons x (List _) >>= f = f x
答案 0 :(得分:7)
data List a = Cons a (List a) | Empty
这定义了一个类型构造函数 List
,其中包含两个数据构造函数 Cons
和Empty
。 Cons
有两个字段,一个是a
类型,另一个是List a
类型,可以是Empty
或Cons
,等等。
所以当你写:
Cons x (List _) >>= f = f x
编译器正在寻找一个名为List
的 data 构造函数来进行模式匹配,并且没有一个 - 因此错误。如果您只想忽略该字段,请写:
Cons x _ >>= f = f x
现在当然这不是Monad
的正确List
实例 - 它更像是Maybe
的实例 - 但我会让你自己解决这个问题