diff src/reduce.sml @ 70:2e0f3b21fb85

Cjrize cfold
author Adam Chlipala <adamc@hcoop.net>
date Thu, 26 Jun 2008 10:02:34 -0400
parents d3cc191cb25f
children 144d082b47ae
line wrap: on
line diff
--- a/src/reduce.sml	Thu Jun 26 09:53:52 2008 -0400
+++ b/src/reduce.sml	Thu Jun 26 10:02:34 2008 -0400
@@ -121,7 +121,14 @@
 
 fun con env c =
     case c of
-        CApp ((CAbs (_, _, c1), loc), c2) =>
+        CApp ((CApp ((CApp ((CFold ks, _), f), _), i), loc), (CRecord (k, xcs), _)) =>
+        (case xcs of
+             [] => #1 i
+           | (n, v) :: rest =>
+             #1 (reduceCon env (CApp ((CApp ((CApp (f, n), loc), v), loc),
+                                      (CApp ((CApp ((CApp ((CFold ks, loc), f), loc), i), loc),
+                                             (CRecord (k, rest), loc)), loc)), loc)))
+      | CApp ((CAbs (_, _, c1), loc), c2) =>
         #1 (reduceCon env (subConInCon (0, c2) c1))
       | CNamed n =>
         (case E.lookupCNamed env n of