gpt4 book ai didi

haskell - 如何将 Maybe 值注入(inject) MaybeT

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

说我有一些foo :: Maybe Int例如,我想将它与 bar :: Int -> MaybeT (Writer String) Int 绑定(bind),这样做的惯用方法是什么?

我可以定义自己的liftMaybe函数,然后使用它,例如:

let liftMaybe = maybe (fail "Nothing") return in liftMaybe foo >>= bar

但是有没有更惯用(或至少简洁)的方式来做到这一点?

最佳答案

MaybeT . return :: (Monad m) => Maybe a -> MaybeT m a
我认为它没有标准名称是一种耻辱,但是做 a hoogle search ,我们看到 relude包使用 hoistMaybe :
hoistMaybe :: Applicative m => Maybe a -> MaybeT m a

更一般的形式是
liftMaybe :: (MonadPlus m) => Maybe a -> m a
liftMaybe = maybe mzero return
这比使用 fail 更可取.我只是把它放在某个方便的模块中。

关于haskell - 如何将 Maybe 值注入(inject) MaybeT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8684252/

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