+recoverType :: Type -> Env Type
+recoverType (IdType ident) = gets (\(st, r)->'Map'.get ident st)
+ >>= \mt->case mt of
+ Nothing = pure (IdType ident)
+ Just t = pure t
+recoverType (t1 ->> t2) = recoverType t1 >>= \t1`->recoverType t2
+ >>= \t2`->pure (t1` ->> t2`)
+recoverType t = pure t
+