gpt4 book ai didi

haskell - 错误 Monad Transformer 的使用或滥用

转载 作者:行者123 更新时间:2023-12-04 22:14:56 25 4
gpt4 key购买 nike

背景

我正在使用由一堆转换器构建的 monad,其中一个是 ErrorT。因此,我的 monad 实现了 MonadError 类,而 throwError 是一个有效的语句。我只想在满足特定条件时抛出并出错。我倾向于做以下事情:

if badCondition
then throwError "You did a bad, bad thing..."
else return ()
doGoodThings
[...]

对此,我认为我什至可以将其概括为以下几点:
throwErrorWhen :: (MonadError e m) => Bool -> e -> m ()
throeErrorWhen cond err = if cond then throwError e else return ()

事实上,这看起来很明显,我很惊讶它不是 MonadError 库。

问题 :

只有满足某些条件,是否有更好/更正确的方法来引发错误?

最佳答案

when 中有 Control.Monad 函数,如果 bool 值为真,它会评估其第二个参数:

when :: Monad m => Bool -> m () -> m ()

所以你得到,
throwErrorWhen cond e = when cond (throwError e)  

关于haskell - 错误 Monad Transformer 的使用或滥用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11077007/

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