Я все время использую парное написание Writer
, но мне всегда приходится создавать экземпляр самого себя:
instance (Monoid w) => Monad ((,) w) where
return x = (mempty, x)
~(w,x) >>= f = let (w', y) = f x in (w `mappend` w', y)
Есть ли это где-нибудь в стандартных библиотеках?