summaryrefslogtreecommitdiff
path: root/src/mono_opt.sml
diff options
context:
space:
mode:
Diffstat (limited to 'src/mono_opt.sml')
-rw-r--r--src/mono_opt.sml16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/mono_opt.sml b/src/mono_opt.sml
index 5d81d24d..fb6ff264 100644
--- a/src/mono_opt.sml
+++ b/src/mono_opt.sml
@@ -348,6 +348,22 @@ fun exp e =
result = ran}), loc)
end
+ | ECase (discE, pes, {disc, result = (TFun (dom, ran), loc)}) =>
+ let
+ fun doBody (p, e) =
+ let
+ val pb = MonoEnv.patBindsN p
+ in
+ (EApp (MonoEnv.liftExpInExp pb e, (ERel pb, loc)), loc)
+ end
+ in
+ EAbs ("x", dom, ran,
+ (optExp (ECase (MonoEnv.liftExpInExp 0 discE,
+ map (fn (p, e) => (p, doBody (p, e))) pes,
+ {disc = disc,
+ result = ran}), loc), loc))
+ end
+
| EWrite (EQuery {exps, tables, state, query,
initial = (EPrim (Prim.String ""), _),
body = (EStrcat ((EPrim (Prim.String s), _),