summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Austin Seipp <mad.one@gmail.com>2012-11-28 11:41:54 -0500
committerGravatar Austin Seipp <mad.one@gmail.com>2012-11-28 11:41:54 -0500
commit9157968f41a0cc24e6621e2860f50a98866ed541 (patch)
tree3fcdb678f49ee4d5a3c2c04364828fc97cfae1ff /src
parent3ef0f1fcb1df60f2d5944a9ff2902d0885fcb13f (diff)
Standard library additions: Option.unsafeGet, Basis.exp
Diffstat (limited to 'src')
-rw-r--r--src/monoize.sml26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/monoize.sml b/src/monoize.sml
index d25e4d1f..bee3fe97 100644
--- a/src/monoize.sml
+++ b/src/monoize.sml
@@ -191,7 +191,8 @@ fun monoType env =
("Minus", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Times", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Div", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
- ("Mod", (L'.TFun (t, (L'.TFun (t, t), loc)), loc))],
+ ("Mod", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
+ ("Exp", (L'.TFun (t, (L'.TFun (t, t), loc)), loc))],
loc)
end
| L.CApp ((L.CFfi ("Basis", "ord"), _), t) =>
@@ -791,15 +792,17 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
("Minus", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Times", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Div", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
- ("Mod", (L'.TFun (t, (L'.TFun (t, t), loc)), loc))], loc)
- fun numEx (t, zero, neg, plus, minus, times, dv, md) =
+ ("Mod", (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
+ ("Exp", (L'.TFun (t, (L'.TFun (t, t), loc)), loc))], loc)
+ fun numEx (t, zero, neg, plus, minus, times, dv, md, ex) =
((L'.ERecord [("Zero", (L'.EPrim zero, loc), t),
("Neg", neg, (L'.TFun (t, t), loc)),
("Plus", plus, (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Minus", minus, (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Times", times, (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
("Div", dv, (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
- ("Mod", md, (L'.TFun (t, (L'.TFun (t, t), loc)), loc))], loc), fm)
+ ("Mod", md, (L'.TFun (t, (L'.TFun (t, t), loc)), loc)),
+ ("Exp", ex, (L'.TFun (t, (L'.TFun (t, t), loc)), loc))], loc), fm)
fun ordTy t =
(L'.TRecord [("Lt", (L'.TFun (t, (L'.TFun (t, (L'.TFfi ("Basis", "bool"), loc)), loc)), loc)),
@@ -1029,6 +1032,13 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
((L'.EAbs ("r", numTy t, (L'.TFun (t, (L'.TFun (t, t), loc)), loc),
(L'.EField ((L'.ERel 0, loc), "Mod"), loc)), loc), fm)
end
+ | L.ECApp ((L.EFfi ("Basis", "exp"), _), t) =>
+ let
+ val t = monoType env t
+ in
+ ((L'.EAbs ("r", numTy t, (L'.TFun (t, (L'.TFun (t, t), loc)), loc),
+ (L'.EField ((L'.ERel 0, loc), "Exp"), loc)), loc), fm)
+ end
| L.EFfi ("Basis", "num_int") =>
let
fun intBin s =
@@ -1047,7 +1057,9 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
intBin "-",
intBin "*",
intBin "/",
- intBin "%")
+ intBin "%",
+ intBin "powl"
+ )
end
| L.EFfi ("Basis", "num_float") =>
let
@@ -1067,7 +1079,9 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
floatBin "-",
floatBin "*",
floatBin "fdiv",
- floatBin "fmod")
+ floatBin "fmod",
+ floatBin "powf"
+ )
end
| L.ECApp ((L.EFfi ("Basis", "lt"), _), t) =>