diff src/elab_util.sml @ 453:787d4931fb07

Almost have that nested save function compiling
author Adam Chlipala <adamc@hcoop.net>
date Sat, 01 Nov 2008 21:19:43 -0400
parents 85819353a84f
children f542bc3133dc
line wrap: on
line diff
--- a/src/elab_util.sml	Sat Nov 01 17:19:12 2008 -0400
+++ b/src/elab_util.sml	Sat Nov 01 21:19:43 2008 -0400
@@ -375,14 +375,19 @@
               | ELet (des, e) =>
                 let
                     val (des, ctx) = foldl (fn (ed, (des, ctx)) =>
-                                                (S.bind2 (des,
-                                                       fn des' =>
-                                                          S.map2 (mfed ctx ed,
+                                               let
+                                                   val ctx' =
+                                                       case #1 ed of
+                                                           EDVal (x, t, _) => bind (ctx, RelE (x, t))
+                                                         | EDValRec vis =>
+                                                           foldl (fn ((x, t, _), ctx) => bind (ctx, RelE (x, t))) ctx vis
+                                               in
+                                                   (S.bind2 (des,
+                                                          fn des' =>
+                                                             S.map2 (mfed ctx ed,
                                                                fn ed' => des' @ [ed'])),
-                                                 case #1 ed of
-                                                     EDVal (x, t, _) => bind (ctx, RelE (x, t))
-                                                   | EDValRec vis =>
-                                                     foldl (fn ((x, t, _), env) => bind (ctx, RelE (x, t))) ctx vis))
+                                                    ctx')
+                                               end)
                                             (S.return2 [], ctx) des
                 in
                     S.bind2 (des,
@@ -400,7 +405,7 @@
                         (EDVal vi', loc))
               | EDValRec vis =>
                 let
-                    val ctx = foldl (fn ((x, t, _), env) => bind (ctx, RelE (x, t))) ctx vis
+                    val ctx = foldl (fn ((x, t, _), ctx) => bind (ctx, RelE (x, t))) ctx vis
                 in
                     S.map2 (ListUtil.mapfold (mfvi ctx) vis,
                          fn vis' =>