summaryrefslogtreecommitdiff
path: root/src/mono_env.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-07-29 13:32:07 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-07-29 13:32:07 -0400
commitac7c66e703f70f57c59697fd90504539c475244d (patch)
tree12b5c0647e5d142366e9cc7d91992aa5857a1755 /src/mono_env.sml
parent4b511aa7ed5b36cb0a9adb898f881d6db0a89996 (diff)
Datatypes through monoize
Diffstat (limited to 'src/mono_env.sml')
-rw-r--r--src/mono_env.sml12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/mono_env.sml b/src/mono_env.sml
index 0134b471..00f31c16 100644
--- a/src/mono_env.sml
+++ b/src/mono_env.sml
@@ -81,9 +81,17 @@ fun lookupENamed (env : env) n =
NONE => raise UnboundNamed n
| SOME x => x
-fun declBinds env (d, _) =
+fun declBinds env (d, loc) =
case d of
- DVal (x, n, t, e, s) => pushENamed env x n t (SOME e) s
+ DDatatype (x, n, xncs) =>
+ let
+ val env = pushTNamed env x n NONE
+ in
+ foldl (fn ((x', n', NONE), env) => pushENamed env x' n' (TNamed n, loc) NONE ""
+ | ((x', n', SOME t), env) => pushENamed env x' n' (TFun (t, (TNamed n, loc)), loc) NONE "")
+ env xncs
+ end
+ | DVal (x, n, t, e, s) => pushENamed env x n t (SOME e) s
| DValRec vis => foldl (fn ((x, n, t, e, s), env) => pushENamed env x n t NONE s) env vis
| DExport _ => env