From 84104b2ae60ef293b9d837998b8162d58e8d4a0e Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 26 Jun 2008 11:11:13 -0400 Subject: Explify efold --- src/corify.sml | 1 + src/elab_print.sml | 2 +- src/expl.sml | 1 + src/expl_print.sml | 1 + src/expl_util.sml | 4 ++++ src/explify.sml | 2 +- 6 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src') 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 "" 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) -- cgit v1.2.3