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