【问题标题】:Haskell: Is (MonadPlus m => Bool -> a -> m a) not useful?Haskell: (MonadPlus m => Bool -> a -> m a) 没用吗?
【发布时间】:2011-10-24 17:32:16
【问题描述】:

taking a gander at codepad.org 之后,我受到了 FizzBu​​zz 的启发,发现自己想要一些功能:

mwhen :: MonadPlus m => Bool -> a -> m a
mwhen b = if b then return else const mzero

这样我就可以做到mwhen (n /? 3) "Foo" `mappend` mwhen (n /? 5) "Bar"

我希望它会引起人们的注意,但no dice

这不是我想的那么有用吗?

【问题讨论】:

  • 只有我,或者似乎有很多haskell问题说“我在Hoogle上没有找到它。所以它有用吗?”。我自己做的。答案仍然很有趣。

标签: haskell monadplus


【解决方案1】:

mwhen b a 正好是 guard b >> return a。当您在guard 之后做更多事情时,您通常会在 mwhen 之前绑定 a 而不需要返回。所以 mwhen 的用处似乎主要是在 do-blocks 的末尾节省了一些击键。

【讨论】:

    【解决方案2】:

    它不存在的一个原因是,通常不需要这个组合器。您可以简单地用<$>> 覆盖when 的结果,并且通常在when 之后还有许多其他单子操作。

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-01-31
      • 2021-08-07
      • 2014-03-23
      • 2016-11-14
      相关资源
      最近更新 更多