gpt4 book ai didi

haskell - Haskell 绑定(bind)运算符如何从 monad 中提取值?

转载 作者:行者123 更新时间:2023-12-04 16:24:25 26 4
gpt4 key购买 nike

如果这个问题听起来很愚蠢,请原谅我,我仍然是学习 Haskell 的初学者。

给定绑定(bind)运算符函数签名:

(>>=) :: m a -> (a -> m b) -> m b

我的问题是,如何从“m a”中提取“a”值,以便函数 (a -> m b) 可以触发? haskell 会在内部抽象这个吗?

最佳答案

这是由编写特定类型的 Monad 实例的人实现的。

例如,如果我们查看 Monadinstance 以获得 Maybewe see [src] :

-- | @since 2.01
instance Monad Maybe where
(Just x) >>= k = k x
Nothing >>= _ = Nothing

(>>) = (*>)

而对于 instance of the list [src] ,我们看到:

-- See Note: [List comprehensions and inlining]
-- | @since 2.01
instance Monad [] where
{-# INLINE (>>=) #-}
xs >>= f = [y | x <- xs, y <- f x]
{-# INLINE (>>) #-}
(>>) = (*>)

如果您因此将某些东西设为 Monad 类型类的实例,则需要为 (>>=) 函数提供一个实现。

关于haskell - Haskell 绑定(bind)运算符如何从 monad 中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68248043/

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