import Control.Monad.Writer import Control.Monad.State -- monad transformers in action main = print $ runState ( runWriterT ( get >>= \a -> tell ["foo"] >> put (a*a) >> tell ["bar"] >> tell [show a] ) ) 5