-specExpr subst (Type ty) = returnSM (Type (substTy subst ty), emptyUDs)
-specExpr subst (Var v) = returnSM (specVar subst v, emptyUDs)
-specExpr subst (Lit lit) = returnSM (Lit lit, emptyUDs)
-specExpr subst (Cast e co) =
- specExpr subst e `thenSM` \ (e', uds) ->
- returnSM ((Cast e' (substTy subst co)), uds)
-specExpr subst (Note note body)
- = specExpr subst body `thenSM` \ (body', uds) ->
- returnSM (Note (specNote subst note) body', uds)
+specExpr subst (Type ty) = return (Type (substTy subst ty), emptyUDs)
+specExpr subst (Var v) = return (specVar subst v, emptyUDs)
+specExpr subst (Lit lit) = return (Lit lit, emptyUDs)
+specExpr subst (Cast e co) = do
+ (e', uds) <- specExpr subst e
+ return ((Cast e' (substTy subst co)), uds)
+specExpr subst (Note note body) = do
+ (body', uds) <- specExpr subst body
+ return (Note (specNote subst note) body', uds)