src/HOL/Tools/datatype_package/datatype_codegen.ML
changeset 31668 a616e56a5ec8
parent 31625 9e4d7d60c3e7
child 31723 f5cafe803b55
equal deleted inserted replaced
31667:cc969090c204 31668:a616e56a5ec8
   424   end;
   424   end;
   425 
   425 
   426 
   426 
   427 (* register a datatype etc. *)
   427 (* register a datatype etc. *)
   428 
   428 
   429 fun add_all_code dtcos thy =
   429 fun add_all_code config dtcos thy =
   430   let
   430   let
   431     val (vs :: _, coss) = (split_list o map (DatatypePackage.the_datatype_spec thy)) dtcos;
   431     val (vs :: _, coss) = (split_list o map (DatatypePackage.the_datatype_spec thy)) dtcos;
   432     val any_css = map2 (mk_constr_consts thy vs) dtcos coss;
   432     val any_css = map2 (mk_constr_consts thy vs) dtcos coss;
   433     val css = if exists is_none any_css then []
   433     val css = if exists is_none any_css then []
   434       else map_filter I any_css;
   434       else map_filter I any_css;
   435     val case_rewrites = maps (#case_rewrites o DatatypePackage.the_datatype thy) dtcos;
   435     val case_rewrites = maps (#case_rewrites o DatatypePackage.the_datatype thy) dtcos;
   436     val certs = map (mk_case_cert thy) dtcos;
   436     val certs = map (mk_case_cert thy) dtcos;
   437   in
   437   in
   438     if null css then thy
   438     if null css then thy
   439     else thy
   439     else thy
   440       |> tap (fn _ => DatatypeAux.message "Registering datatype for code generator ...")
   440       |> tap (fn _ => DatatypeAux.message config "Registering datatype for code generator ...")
   441       |> fold Code.add_datatype css
   441       |> fold Code.add_datatype css
   442       |> fold_rev Code.add_default_eqn case_rewrites
   442       |> fold_rev Code.add_default_eqn case_rewrites
   443       |> fold Code.add_case certs
   443       |> fold Code.add_case certs
   444       |> add_equality vs dtcos
   444       |> add_equality vs dtcos
   445    end;
   445    end;