I use the pair spelling of Writer all the time, but I always have to instantiate myself:
instance (Monoid w) => Monad ((,) w) where
return x = (mempty, x)
~(w,x) >>= f = let (w', y) = f x in (w `mappend` w', y)
Does this live anywhere in the standard libraries?
As camccann mentioned in the comment, Control.Monad.Instances defines only the Functor instance.
Control.Monad.Applicative defines the Applicative instance.
The transformers package, and thus also version 2 and above of the
mtl package, define a wrapper function writer :: (a, w) -> Writer w a.
But I have not found the Monad instance anywhere.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With