gpt4 book ai didi

haskell - 也许单子(monad)用法示例

转载 作者:行者123 更新时间:2023-12-02 02:49:59 25 4
gpt4 key购买 nike

我正在尝试学习 Haskell,但我在使用 monad 时遇到了问题。

我导入了模块 Data.Maybe .

但我不知道如何使用 >>=运算符(operator)。

给定 (>>=) :: Monad m => m a -> (a -> m b) -> m b我不明白如何定义函数 (a -> m b) .

有人可以提供一些教学示例吗?

最佳答案

Maybe monad 的一个相当常见的例子是除法。在某些方面,Maybe monad 表示一个计算要么给出结果(Just)要么失败(Nothing),除法就是这样:除非你除以 0,否则它是有效的,在这种情况下它是失败的.

代码总是有用的:

divide :: (Fractional a) => a -> a -> Maybe a
divide a 0 = Nothing
divide a b = Just $ a / b

使用此功能的一些示例:
> divide 1 2
Just 0.5
> divide 20 3
Just 6.666666666666667
> divide 1 0 -- Oops
Nothing

因为 Maybe 是一个 monad,我们可以使用这个 divide 进行计算。功能并自动传播任何错误。例如。以下计算 1/x + 1安全地
recipPlusOne :: (Fractional a) => a -> Maybe a
recipPlusOne x = divide 1 x >>= return . (+1)

-- equivalently,
recipPlusOne' x = fmap (+1) $ divide 1 x

(注意 return . (+1) 是一个函数 a -> m b ,因为它接受一个数字,加一个( (+1) ),然后将它包装在 Maybe monad 中( return )。)

错误通过传播,
> recipPlusOne 1
Just 2.0
> recipPlusOne 0.1
Just 11.0
> recipPlusOne 0 -- Oops, divide by 0
Nothing

关于haskell - 也许单子(monad)用法示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10881785/

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