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"

私はそれがフーグルで上がると思っていましたが、サイコロはありません

これは私が思っているほど便利ではありませんか?

4

2 に答える 2

1

それが存在しない理由は、通常、このコンビネータは必要ないからです。when<$またはの結果を単純に上書きでき>>ます。通常、。の後に他の多くの単項演算がありwhenます。

于 2011-10-24T17:46:34.007 に答える
1

mwhen b a正確にguard b >> return aです。の後にさらに多くのことを行う場合guard、通常はmwhenの前にaをバインドし、リターンは必要ありません。したがって、mwhenの有用性は、ほとんどの場合、doブロックの最後でいくつかのキーストロークを節約することのようです。

于 2011-10-27T14:29:39.473 に答える