sno*_*now 13 monads lambda haskell lambda-calculus
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
Run Code Online (Sandbox Code Playgroud)
我以前从未在类型类中看过方程式(或函数声明?).为什么在类型类中有一个等式?
我知道_是一个匹配任何东西的术语.但是m >> =\_ - > n匹配?
Dan*_*her 17
这是该方法的默认实现.除非您的实例声明包含显式实现(>>),否则将使用该定义.如果某些方法可以使用另一种方法实现,则默认方法很普遍,但是对于某些数据类型可能会有更高效的实现.
m >>= \_ -> n
Run Code Online (Sandbox Code Playgroud)
意味着'结果' m被输入到忽略其参数的函数并且n无论如何返回.它也可以写
m >>= const n
Run Code Online (Sandbox Code Playgroud)
在具有效果的monad的上下文中,它"做m有效果,但忽略返回值,然后做n".这就是那里(>>)的意思.
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |