Most of the monad explanations use examples where the monad wraps a value. E.g. Maybe a, where the a type variable is what\'s wrapped. But I\'m won
Maybe a
a
Well there is
data Useless a = Useless instance Monad Useless where return = const Useless Useless >>= f = Useless
but as I indicated, that isn't usefull.
What you want is the Writer monad, which wraps up a monoid as a monad so you can use do notation.
Writer