import Data.Coercible data EndoT m a = EndoT {runEndoT :: a -> m a} deriving Wrapped instance Monad m => Monoid (EndoT m a) where mempty = coerce return mappend = coerce (<=<)
(deriving Wrapped)