class Monad m where
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
m >> n = m >>= \_ -> n
fail :: String -> m a
我以前从未见过类型类中的等式(或函数声明?)。为什么在类型类中有一个等式?
我知道 _ 是匹配任何内容的术语。但 m>> = \ _ - > n 匹配?
答案 0 :(得分:17)
这是该方法的默认实现。除非您的实例声明包含(>>)
的显式实现,否则将使用该定义。如果某些方法可以使用另一种方法实现,则默认方法很普遍,但对某些数据类型可能会有更高效的实现。
m >>= \_ -> n
表示m
的'result'被赋予忽略其参数的函数,并返回n
无论如何。它也可以写成
m >>= const n
在具有效果的monad的上下文中,具有效果的'm
,但忽略返回值,然后执行n
'。这就是(>>)
在那里的意思。