added requirement to satisfy Monoid laws
added MonadOps