这个带有 lambda 符号的方程是什么?米>> n = m >>= \_ -> n”在 monad 的声明中?

发布于 2024-12-24 18:58:25 字数 364 浏览 1 评论 0原文

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 匹配?

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

I've never seen a equation(or function declaration?) in typeclass before. Why is there a equation in typeclass?

I know _ is a term for matching anything. but what m >>= \_ -> n match?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铁轨上的流浪者 2024-12-31 18:58:25

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

m >>= \_ -> n

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

m >>= const n

在具有效果的 monad 的上下文中,“do m 具有效果,但忽略返回值,然后 do n”。这就是 (>>) 的作用。

It's a default implementation for the method. Unless your instance declaration contains an explicit implementation of (>>), that's the definition that will be used. Default methods are widespread if some method can be implemented using another method, but potentially there can be more efficient implementations for some datatypes.

m >>= \_ -> n

means the 'result' of m is fed to the function that ignores its argument and returns n no matter. It could also be written

m >>= const n

In the context of monads with effects, it's 'do m to have the effects, but ignore the return value, then do n'. That's what (>>) is meant to do there.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文