comparison src/specialize.sml @ 807:61a1f5c5ae2c

Mutual datatypes through Effectize
author Adam Chlipala <adamc@hcoop.net>
date Sat, 16 May 2009 15:45:12 -0400
parents d20d6afc1206
children 0d30e6338c65
comparison
equal deleted inserted replaced
806:0e554bfd6d6a 807:61a1f5c5ae2c
113 val (t, st) = specCon st t 113 val (t, st) = specCon st t
114 in 114 in
115 ((x, n, SOME t), st) 115 ((x, n, SOME t), st)
116 end) st cons 116 end) st cons
117 117
118 val d = (DDatatype (#name dt ^ "_s", 118 val d = (DDatatype [(#name dt ^ "_s",
119 n', 119 n',
120 [], 120 [],
121 cons), #2 (List.hd args)) 121 cons)], #2 (List.hd args))
122 in 122 in
123 (n', cmap, {count = #count st, 123 (n', cmap, {count = #count st,
124 datatypes = #datatypes st, 124 datatypes = #datatypes st,
125 constructors = #constructors st, 125 constructors = #constructors st,
126 decls = d :: #decls st}) 126 decls = d :: #decls st})
246 let 246 let
247 (*val () = Print.preface ("decl:", CorePrint.p_decl CoreEnv.empty all)*) 247 (*val () = Print.preface ("decl:", CorePrint.p_decl CoreEnv.empty all)*)
248 val (d, st) = specDecl st d 248 val (d, st) = specDecl st d
249 in 249 in
250 case #1 d of 250 case #1 d of
251 DDatatype (x, n, xs, xnts) => 251 DDatatype [(x, n, xs, xnts)] =>
252 (rev (d :: #decls st), 252 (rev (d :: #decls st),
253 {count = #count st, 253 {count = #count st,
254 datatypes = IM.insert (#datatypes st, n, 254 datatypes = IM.insert (#datatypes st, n,
255 {name = x, 255 {name = x,
256 params = length xs, 256 params = length xs,