Skip to content

bug: documentation for Control.Monad.guard not useful after AMP

Since the AMP refactor, the documentation for Control.Monad.guard [1] is no longer useful for beginners. It simply gives the definition of guard, but in prose:

guard b is pure () if b is True, and empty if b is False.

(and better to just use Haskell instead of prose here, no?)

To use guard in a MonadPlus, you now need to know that Alternative is a super class of MonadPlus, and that mzero = zero. The documentation [2] for MonadPlus doens't mention mzero = zero in the default definition -- you must look at the source for that -- and the docs for guard don't mention MonadPlus.

The documentation for Control.Monad.guard should suggest use with MonadPlus, and give an example (compare with the very helpful example for Control.Monad.when). A non-monadic example would also be useful.

[1] https://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Monad.html#v:guard

[2] https://hackage.haskell.org/package/base-4.9.0.0/docs/Control-Monad.html#t:MonadPlus

Trac metadata
Trac field Value
Version 8.0.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information