summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-06-26 11:11:13 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-06-26 11:11:13 -0400
commit84104b2ae60ef293b9d837998b8162d58e8d4a0e (patch)
treee810ad8175699aff18aa8e2e3835a784553f0213
parent77790187bb1c1e0de956d4bbc7795678fb0c6544 (diff)
Explify efold
-rw-r--r--src/corify.sml1
-rw-r--r--src/elab_print.sml2
-rw-r--r--src/expl.sml1
-rw-r--r--src/expl_print.sml1
-rw-r--r--src/expl_util.sml4
-rw-r--r--src/explify.sml2
6 files changed, 9 insertions, 2 deletions
diff --git a/src/corify.sml b/src/corify.sml
index 94654064..893e0f2a 100644
--- a/src/corify.sml
+++ b/src/corify.sml
@@ -299,6 +299,7 @@ fun corifyExp st (e, loc) =
| L.ERecord xes => (L'.ERecord (map (fn (c, e, t) => (corifyCon st c, corifyExp st e, corifyCon st t)) xes), loc)
| L.EField (e1, c, {field, rest}) => (L'.EField (corifyExp st e1, corifyCon st c,
{field = corifyCon st field, rest = corifyCon st rest}), loc)
+ | L.EFold _ => raise Fail "Corify EFold"
fun corifyDecl ((d, loc : EM.span), st) =
case d of
diff --git a/src/elab_print.sml b/src/elab_print.sml
index 085caac7..9158a6ae 100644
--- a/src/elab_print.sml
+++ b/src/elab_print.sml
@@ -249,7 +249,7 @@ fun p_exp' par env (e, _) =
box [p_exp' true env e,
string ".",
p_con' true env c]
- | EFold _ => string "fold"
+ | EFold _ => string "fold"
| EError => string "<ERROR>"
diff --git a/src/expl.sml b/src/expl.sml
index 952dc5da..87ca990e 100644
--- a/src/expl.sml
+++ b/src/expl.sml
@@ -68,6 +68,7 @@ datatype exp' =
| ERecord of (con * exp * con) list
| EField of exp * con * { field : con, rest : con }
+ | EFold of kind
withtype exp = exp' located
diff --git a/src/expl_print.sml b/src/expl_print.sml
index 445a0fff..ab8462b8 100644
--- a/src/expl_print.sml
+++ b/src/expl_print.sml
@@ -233,6 +233,7 @@ fun p_exp' par env (e, _) =
box [p_exp' true env e,
string ".",
p_con' true env c]
+ | EFold _ => string "fold"
and p_exp env = p_exp' false env
diff --git a/src/expl_util.sml b/src/expl_util.sml
index 809bc1e1..aea9e4f5 100644
--- a/src/expl_util.sml
+++ b/src/expl_util.sml
@@ -263,6 +263,10 @@ fun mapfoldB {kind = fk, con = fc, exp = fe, bind} =
S.map2 (mfc ctx rest,
fn rest' =>
(EField (e', c', {field = field', rest = rest'}), loc)))))
+ | EFold k =>
+ S.map2 (mfk k,
+ fn k' =>
+ (EFold k', loc))
in
mfe
end
diff --git a/src/explify.sml b/src/explify.sml
index 86d408c6..91accd81 100644
--- a/src/explify.sml
+++ b/src/explify.sml
@@ -79,7 +79,7 @@ fun explifyExp (e, loc) =
| L.ERecord xes => (L'.ERecord (map (fn (c, e, t) => (explifyCon c, explifyExp e, explifyCon t)) xes), loc)
| L.EField (e1, c, {field, rest}) => (L'.EField (explifyExp e1, explifyCon c,
{field = explifyCon field, rest = explifyCon rest}), loc)
- | L.EFold _ => raise Fail "Explify EFold"
+ | L.EFold k => (L'.EFold (explifyKind k), loc)
| L.EError => raise Fail ("explifyExp: EError at " ^ EM.spanToString loc)