Add "writer" Monad instance (,) o to Control.Monad.Instances
I'd like to have a (,)-style writer instance alongside the (->)-based reader instance for Monad in Control.Monad.Instances
.
Here's the current reader:
instance Monad ((->) r) where
return = const
f >>= k = \ r -> k (f r) r
and my proposed writer:
instance Monoid o => Monad ((,) o) where
return = pure
(o,a) >>= f = (o `mappend` o', a') where (o',a') = f a
where the return
definition relies on the Applicative instance of ((,) o)
. Written out explicitly,
return a = (mempty,a)
Control.Monad.Instances
will also need two new imports:
import Data.Monoid (Monoid(..))
import Control.Applicative (pure)
Trac metadata
Trac field | Value |
---|---|
Version | 6.8.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | libraries/base |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | conal@conal.net |
Operating system | Unknown |
Architecture | Unknown |