type CmdStack m = State.StateT (MonadState.StateT State (Logger.LoggerT MidiThru (Log.LogT m))) newtype CmdT m a = CmdT (CmdStack m a) deriving (Functor, Monad, Trans.MonadIO, Error.MonadError State.StateError)