3

在浏览了 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"

我预计它会在 hoogle 上出现,但没有骰子

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

4

2 回答 2

1

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

于 2011-10-24T17:46:34.007 回答
1

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

于 2011-10-27T14:29:39.473 回答