【问题标题】:what's this equation with lambda notation " m >> n = m >>= \_ -> n " in monad's declaration?在 monad 的声明中,这个带有 lambda 符号“ m >> n = m >>= \_ -> n ”的方程是什么?
【发布时间】:2012-01-31 04:32:42
【问题描述】:
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

我以前从未在 typeclass 中看到过方程式(或函数声明?)。为什么 typeclass 中有一个方程?

我知道 _ 是匹配任何事物的术语。但是 m >>= \_ -> n 匹配什么?

【问题讨论】:

  • 我刚刚意识到 \_ -> n 抛出了第一个参数。

标签: haskell lambda monads lambda-calculus


【解决方案1】:

这是该方法的默认实现。除非您的实例声明包含(>>) 的显式实现,否则将使用该定义。如果可以使用另一种方法实现某些方法,则默认方法很普遍,但是对于某些数据类型可能会有更有效的实现。

m >>= \_ -> n

表示m 的“结果”被提供给忽略其参数并返回n 的函数。也可以写成

m >>= const n

在具有效果的 monad 的上下文中,'执行 m 以产生效果,但忽略返回值,然后执行 n'。这就是(>>) 的意义所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多