The problem with StateT s (MaybeT m) a is that on failure, the original state is lost.
A more useful type is MaybeT (StateT s m) a which at least keeps the original input state
on failure.
The problem with StateT s (ExceptT e m) a is that on failure, the original state is lost.
A more useful type is ExceptT e (StateT s m) a which at least keeps the original input state
on failure.