Haskell: (MonadPlus m => Bool -> a -> m a) 这个函数不实用吗?

3

查看codepad.org后,我受到FizzBuzz游戏的启发,发现自己需要一些函数:

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"

我希望它能在hoogle上找到,但没有

这个东西不像我想象的那么有用吗?


是我自己的问题还是有很多Haskell问题说“我在Hoogle上没找到。那么它有用吗?”我也这样做了。答案仍然很有趣。 - gawi
2个回答

1
一个原因是,通常情况下并不需要这种组合器。你可以通过<$>>来简单地覆盖when的结果,并且通常在when之后还有许多其他单子操作。

1

mwhen b a 恰好等于 guard b >> return a。当你在 guard 之后做更多的事情时,通常会在 mwhen 之前绑定 a,而不需要返回。因此,mwhen 的实用性似乎主要是在 do-blocks 结尾节省一些按键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接