Maybe a g :: a -> Maybe a h :: a -> Maybe a 我想用以下方式组合它们:如果 f 返回 Nothing,则计算 g。如果-6ren">
gpt4 book ai didi

haskell - 在 "reverse"中使用 Maybe Monad

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

假设我有很多功能:

f :: a -> Maybe a
g :: a -> Maybe a
h :: a -> Maybe a

我想用以下方式组合它们:如果 f 返回 Nothing,则计算 g。如果 g 返回 Nothing,则计算 h。如果其中任何一个计算出 Just a,则停止该链。整个组合 (h . g . f) 当然应该返回 Maybe a。

这与 Maybe monad 的典型使用相反,通常如果没有返回任何内容,您就会停止计算。

像这样的链接计算的 Haskell 习惯用法是什么?

最佳答案

mplus正是您正在寻找的内容,它是 MonadPlus 类型类的一部分。这是它的定义:

instance MonadPlus Maybe where
mzero = Nothing

Nothing `mplus` ys = ys
xs `mplus` _ys = xs

要在您的情况下使用它:

combined x = (f x) `mplus` (g x) `mplus` (h x) 

关于haskell - 在 "reverse"中使用 Maybe Monad,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5606228/

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