在Learn You A Haskell文本中,列表 monad 的定义如下:
instance Monad [] where
return x = [x]
xs >>= f = concat (map f xs)
fail _ = []
由于绑定运算符应该将列表值转换为裸值并concat
修剪一层列表,所以这个定义乍一看是有道理的。[a]
但是,当 map 的输出类型, 与 concat 的输入类型不匹配时,该定义如何编译[[a]]
?
在Learn You A Haskell文本中,列表 monad 的定义如下:
instance Monad [] where
return x = [x]
xs >>= f = concat (map f xs)
fail _ = []
由于绑定运算符应该将列表值转换为裸值并concat
修剪一层列表,所以这个定义乍一看是有道理的。[a]
但是,当 map 的输出类型, 与 concat 的输入类型不匹配时,该定义如何编译[[a]]
?