src/HOL/Tools/typedef_package.ML
changeset 17261 193b84a70ca4
parent 17144 6642e0f96f44
child 17280 a6917ddc864f
equal deleted inserted replaced
17260:df7c3b1f390a 17261:193b84a70ca4
    60   fun merge _ (tabs: T * T) = Symtab.merge (op =) tabs;
    60   fun merge _ (tabs: T * T) = Symtab.merge (op =) tabs;
    61   fun print _ _ = ();
    61   fun print _ _ = ();
    62 end);
    62 end);
    63 
    63 
    64 fun put_typedef newT oldT Abs_name Rep_name thy =
    64 fun put_typedef newT oldT Abs_name Rep_name thy =
    65   TypedefData.put (Symtab.update_new
    65   TypedefData.put (Symtab.curried_update_new
    66     ((fst (dest_Type newT), (newT, oldT, Abs_name, Rep_name)),
    66     (fst (dest_Type newT), (newT, oldT, Abs_name, Rep_name)) (TypedefData.get thy)) thy;
    67      TypedefData.get thy)) thy;
       
    68 
    67 
    69 
    68 
    70 
    69 
    71 (** type declarations **)
    70 (** type declarations **)
    72 
    71 
   281         val (gr', _) = Codegen.invoke_tycodegen thy defs dep module false (gr, T);
   280         val (gr', _) = Codegen.invoke_tycodegen thy defs dep module false (gr, T);
   282         val (gr'', ps) =
   281         val (gr'', ps) =
   283           foldl_map (Codegen.invoke_codegen thy defs dep module true) (gr', ts);
   282           foldl_map (Codegen.invoke_codegen thy defs dep module true) (gr', ts);
   284         val id = Codegen.mk_qual_id module (Codegen.get_const_id s gr'')
   283         val id = Codegen.mk_qual_id module (Codegen.get_const_id s gr'')
   285       in SOME (gr'', Codegen.mk_app brack (Pretty.str id) ps) end;
   284       in SOME (gr'', Codegen.mk_app brack (Pretty.str id) ps) end;
   286     fun lookup f T = getOpt (Option.map f (Symtab.lookup
   285     fun lookup f T =
   287       (TypedefData.get thy, get_name T)), "")
   286       (case Symtab.curried_lookup (TypedefData.get thy) (get_name T) of
       
   287         NONE => ""
       
   288       | SOME s => f s);
   288   in
   289   in
   289     (case strip_comb t of
   290     (case strip_comb t of
   290        (Const (s, Type ("fun", [T, U])), ts) =>
   291        (Const (s, Type ("fun", [T, U])), ts) =>
   291          if lookup #4 T = s andalso
   292          if lookup #4 T = s andalso
   292            is_none (Codegen.get_assoc_type thy (get_name T))
   293            is_none (Codegen.get_assoc_type thy (get_name T))
   301 fun mk_tyexpr [] s = Pretty.str s
   302 fun mk_tyexpr [] s = Pretty.str s
   302   | mk_tyexpr [p] s = Pretty.block [p, Pretty.str (" " ^ s)]
   303   | mk_tyexpr [p] s = Pretty.block [p, Pretty.str (" " ^ s)]
   303   | mk_tyexpr ps s = Pretty.list "(" (") " ^ s) ps;
   304   | mk_tyexpr ps s = Pretty.list "(" (") " ^ s) ps;
   304 
   305 
   305 fun typedef_tycodegen thy defs gr dep module brack (Type (s, Ts)) =
   306 fun typedef_tycodegen thy defs gr dep module brack (Type (s, Ts)) =
   306       (case Symtab.lookup (TypedefData.get thy, s) of
   307       (case Symtab.curried_lookup (TypedefData.get thy) s of
   307          NONE => NONE
   308          NONE => NONE
   308        | SOME (newT as Type (tname, Us), oldT, Abs_name, Rep_name) =>
   309        | SOME (newT as Type (tname, Us), oldT, Abs_name, Rep_name) =>
   309            if isSome (Codegen.get_assoc_type thy tname) then NONE else
   310            if isSome (Codegen.get_assoc_type thy tname) then NONE else
   310            let
   311            let
   311              val module' = Codegen.if_library
   312              val module' = Codegen.if_library