monad M = EnvT(Environ) Env + StateT(Store) Sto + WriterT(String) Out + List data V = Wrong | Num Int | Fun (V -> M V) | Ref Loc | Unit type Environ = [(String,V)] type Store = [(Loc,V)] type Loc = Int