diff options
author | Austin Seipp <mad.one@gmail.com> | 2012-11-28 11:41:54 -0500 |
---|---|---|
committer | Austin Seipp <mad.one@gmail.com> | 2012-11-28 11:41:54 -0500 |
commit | 9157968f41a0cc24e6621e2860f50a98866ed541 (patch) | |
tree | 3fcdb678f49ee4d5a3c2c04364828fc97cfae1ff /src | |
parent | 3ef0f1fcb1df60f2d5944a9ff2902d0885fcb13f (diff) |
Standard library additions: Option.unsafeGet, Basis.exp
Diffstat (limited to 'src')
-rw-r--r-- | src/monoize.sml | 26 |
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) => |