equal
deleted
inserted
replaced
114 end; |
114 end; |
115 |
115 |
116 fun mk_rules tname cons pre = " map (get_axiom thy) " ^ |
116 fun mk_rules tname cons pre = " map (get_axiom thy) " ^ |
117 mk_list (map (fn ((s, _), _) => quote (tname ^ pre ^ strip_quotes s)) cons); |
117 mk_list (map (fn ((s, _), _) => quote (tname ^ pre ^ strip_quotes s)) cons); |
118 |
118 |
119 (*generate string for calling add_datatype*) |
119 (*generate string for calling add_datatype and build_record*) |
120 fun mk_params ((ts, tname), cons) = |
120 fun mk_params ((ts, tname), cons) = |
121 ("val (thy, " ^ tname ^ "_add_primrec) = Datatype.add_datatype\n" |
121 ("val (thy, " ^ tname ^ "_add_primrec) = Datatype.add_datatype\n" |
122 ^ mk_triple (mk_list ts, quote tname, mk_list (mk_cons cons)) ^ " thy\n\ |
122 ^ mk_triple (mk_list ts, quote tname, mk_list (mk_cons cons)) ^ " thy\n\ |
123 \val thy = thy", |
123 \val thy = thy", |
124 "structure " ^ tname ^ " =\n\ |
124 "structure " ^ tname ^ " =\n\ |
137 \ val cases =" ^ mk_rules tname cons "_case_" ^ ";\n\ |
137 \ val cases =" ^ mk_rules tname cons "_case_" ^ ";\n\ |
138 \ val recs =" ^ mk_rules tname cons "_rec_" ^ ";\n\ |
138 \ val recs =" ^ mk_rules tname cons "_rec_" ^ ";\n\ |
139 \ val simps = inject @ distinct @ cases @ recs;\n\ |
139 \ val simps = inject @ distinct @ cases @ recs;\n\ |
140 \ fun induct_tac a = res_inst_tac [(" ^ quote tname ^ ", a)] induct;\n\ |
140 \ fun induct_tac a = res_inst_tac [(" ^ quote tname ^ ", a)] induct;\n\ |
141 \end;\n\ |
141 \end;\n\ |
|
142 \val dummy = datatypes := Dtype.build_record (thy, " ^ |
|
143 mk_pair (quote tname, mk_list (map (fst o fst) cons)) ^ |
|
144 ", " ^ tname ^ ".induct_tac) :: (!datatypes);\n\ |
142 \val dummy = Addsimps " ^ tname ^ ".simps;\n"); |
145 \val dummy = Addsimps " ^ tname ^ ".simps;\n"); |
143 |
146 |
144 (*parsers*) |
147 (*parsers*) |
145 val tvars = type_args >> map (cat "dtVar"); |
148 val tvars = type_args >> map (cat "dtVar"); |
146 |
149 |