module Example where import Control.Monad.Identity import StateMonadT import ExnMonadT type State = Int type Error = String type ResMonad a = StateT (ExnT Identity Error) State a exm1 :: ResMonad Int exm1 = do a<- get id if (a == 0) then lift $ err "NULL!" else set $ \_ -> a+1 return a