Skip to content

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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information