use of mtl and ExceptT monad