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