summaryrefslogtreecommitdiff
path: root/src/monoize.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-06-07 16:45:00 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-06-07 16:45:00 -0400
commit3d7820916ae84710cab458c6b4ba9b1412ee3f5d (patch)
tree30300e247037398cd77a827ae1c38b96d19baec7 /src/monoize.sml
parent818577c761fb4d2ebbddbeb614bfbf33e38b92f6 (diff)
Fix datatype import bug in Elaborate; fix server-side source setting; more standard library stuff
Diffstat (limited to 'src/monoize.sml')
-rw-r--r--src/monoize.sml42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/monoize.sml b/src/monoize.sml
index bdc8ef82..e0795b84 100644
--- a/src/monoize.sml
+++ b/src/monoize.sml
@@ -778,6 +778,48 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
(L'.TFfi ("Basis", "bool"), loc),
(L'.EBinop ("==", (L'.ERel 1, loc), (L'.ERel 0, loc)), loc)), loc)), loc),
fm)
+ | L.ECApp ((L.EFfi ("Basis", "eq_option"), _), t) =>
+ let
+ val t = monoType env t
+ val t' = (L'.TOption t, loc)
+ val bool = (L'.TFfi ("Basis", "bool"), loc)
+ in
+ ((L'.EAbs ("f", (L'.TFun (t, (L'.TFun (t, bool), loc)), loc),
+ (L'.TFun (t', (L'.TFun (t', bool), loc)), loc),
+ (L'.EAbs ("x", t', (L'.TFun (t', bool), loc),
+ (L'.EAbs ("y", t', bool,
+ (L'.ECase ((L'.ERecord [("1", (L'.ERel 1, loc), t'),
+ ("2", (L'.ERel 0, loc), t')], loc),
+ [((L'.PRecord [("1", (L'.PNone t, loc), t'),
+ ("2", (L'.PNone t, loc), t')], loc),
+ (L'.ECon (L'.Enum, L'.PConFfi {mod = "Basis",
+ datatyp = "bool",
+ con = "True",
+ arg = NONE},
+ NONE), loc)),
+ ((L'.PRecord [("1", (L'.PSome (t,
+ (L'.PVar ("x1",
+ t), loc)),
+ loc), t'),
+ ("2", (L'.PSome (t,
+ (L'.PVar ("x2",
+ t), loc)),
+ loc), t')], loc),
+ (L'.EApp ((L'.EApp ((L'.ERel 4, loc),
+ (L'.ERel 1, loc)), loc),
+ (L'.ERel 0, loc)), loc)),
+ ((L'.PWild, loc),
+ (L'.ECon (L'.Enum, L'.PConFfi {mod = "Basis",
+ datatyp = "bool",
+ con = "False",
+ arg = NONE},
+ NONE), loc))],
+ {disc = (L'.TRecord [("1", t'), ("2", t')], loc),
+ result = (L'.TFfi ("Basis", "bool"), loc)}),
+ loc)), loc)), loc)), loc),
+ fm)
+ end
+
| L.ECApp ((L.EFfi ("Basis", "mkEq"), _), t) =>
let
val t = monoType env t