> n = m >>=\_ -> n "的等式是什么?-6ren"> > n = m >>=\_ -> n "的等式是什么?-class Monad m where return :: a -> m a (>>=) :: m a -> (a -> m b) -> m b (>>) :: m a -> m b-6ren">
gpt4 book ai didi

haskell - monad 声明中带有 lambda 符号 "m >> n = m >>=\_ -> n "的等式是什么?

转载 作者:行者123 更新时间:2023-12-03 23:37:23 26 4
gpt4 key购买 nike

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

最佳答案

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

m >>= \_ -> n

表示 m 的“结果”被馈送到忽略其参数并返回 n 的函数不管。也可以写成
m >>= const n

在具有效果的 monad 的上下文中,它是 'do m要产生效果,但忽略返回值,然后执行 n '。就是这样 (>>)打算在那里做。

关于haskell - monad 声明中带有 lambda 符号 "m >> n = m >>=\_ -> n "的等式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8690187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com