Mercurial > urweb
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, |