diff src/explify.sml @ 806:0e554bfd6d6a

Mutual datatypes through Corify
author Adam Chlipala <adamc@hcoop.net>
date Sat, 16 May 2009 15:22:05 -0400
parents e2780d2f4afc
children 7f871c03e3a1
line wrap: on
line diff
--- a/src/explify.sml	Sat May 16 15:14:17 2009 -0400
+++ b/src/explify.sml	Sat May 16 15:22:05 2009 -0400
@@ -137,10 +137,10 @@
     case sgi of
         L.SgiConAbs (x, n, k) => SOME (L'.SgiConAbs (x, n, explifyKind k), loc)
       | L.SgiCon (x, n, k, c) => SOME (L'.SgiCon (x, n, explifyKind k, explifyCon c), loc)
-      (*| L.SgiDatatype (x, n, xs, xncs) => SOME (L'.SgiDatatype (x, n, xs,
-                                                                map (fn (x, n, co) =>
-                                                                        (x, n, Option.map explifyCon co)) xncs), loc)*)
-      | L.SgiDatatype _ => raise Fail "Explify SgiDatatype"
+      | L.SgiDatatype dts => SOME (L'.SgiDatatype (map (fn (x, n, xs, xncs) =>
+                                                           (x, n, xs,
+                                                            map (fn (x, n, co) =>
+                                                                    (x, n, Option.map explifyCon co)) xncs)) dts), loc)
       | L.SgiDatatypeImp (x, n, m1, ms, s, xs, xncs) =>
         SOME (L'.SgiDatatypeImp (x, n, m1, ms, s, xs, map (fn (x, n, co) =>
                                                               (x, n, Option.map explifyCon co)) xncs), loc)
@@ -164,10 +164,10 @@
 fun explifyDecl (d, loc : EM.span) =
     case d of
         L.DCon (x, n, k, c) => SOME (L'.DCon (x, n, explifyKind k, explifyCon c), loc)
-      (*| L.DDatatype (x, n, xs, xncs) => SOME (L'.DDatatype (x, n, xs,
-                                                            map (fn (x, n, co) =>
-                                                                    (x, n, Option.map explifyCon co)) xncs), loc)*)
-      | L.DDatatype _ => raise Fail "Explify DDatatype"
+      | L.DDatatype dts => SOME (L'.DDatatype (map (fn (x, n, xs, xncs) =>
+                                                       (x, n, xs,
+                                                        map (fn (x, n, co) =>
+                                                                (x, n, Option.map explifyCon co)) xncs)) dts), loc)
       | L.DDatatypeImp (x, n, m1, ms, s, xs, xncs) =>
         SOME (L'.DDatatypeImp (x, n, m1, ms, s, xs,
                                map (fn (x, n, co) =>