问题
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?
回答1:
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.
来源:https://stackoverflow.com/questions/4204086/is-the-monad-w-instance-anywhere-standard