src/HOLCF/Tools/cont_consts.ML
changeset 30919 dcf8a7a66bd1
parent 30910 a7cc0ef93269
child 31023 d027411c9a38
     1.1 --- a/src/HOLCF/Tools/cont_consts.ML	Tue Apr 21 11:11:04 2009 -0700
     1.2 +++ b/src/HOLCF/Tools/cont_consts.ML	Tue Apr 21 15:57:08 2009 -0700
     1.3 @@ -8,8 +8,8 @@
     1.4  
     1.5  signature CONT_CONSTS =
     1.6  sig
     1.7 -  val add_consts: (bstring * string * mixfix) list -> theory -> theory
     1.8 -  val add_consts_i: (bstring * typ * mixfix) list -> theory -> theory
     1.9 +  val add_consts: (binding * string * mixfix) list -> theory -> theory
    1.10 +  val add_consts_i: (binding * typ * mixfix) list -> theory -> theory
    1.11  end;
    1.12  
    1.13  structure ContConsts: CONT_CONSTS =
    1.14 @@ -49,20 +49,24 @@
    1.15     declaration with the original name, type ...=>..., and the original mixfix
    1.16     is generated and connected to the other declaration via some translation.
    1.17  *)
    1.18 -fun fix_mixfix (syn                     , T, mx as Infix           p ) =
    1.19 -               (Syntax.const_name mx syn, T,       InfixName (syn, p))
    1.20 -  | fix_mixfix (syn                     , T, mx as Infixl           p ) =
    1.21 -               (Syntax.const_name mx syn, T,       InfixlName (syn, p))
    1.22 -  | fix_mixfix (syn                     , T, mx as Infixr           p ) =
    1.23 -               (Syntax.const_name mx syn, T,       InfixrName (syn, p))
    1.24 +fun const_binding mx = Binding.name o Syntax.const_name mx o Binding.name_of;
    1.25 +
    1.26 +fun fix_mixfix (syn                 , T, mx as Infix           p ) =
    1.27 +               (const_binding mx syn, T,       InfixName (Binding.name_of syn, p))
    1.28 +  | fix_mixfix (syn                 , T, mx as Infixl           p ) =
    1.29 +               (const_binding mx syn, T,       InfixlName (Binding.name_of syn, p))
    1.30 +  | fix_mixfix (syn                 , T, mx as Infixr           p ) =
    1.31 +               (const_binding mx syn, T,       InfixrName (Binding.name_of syn, p))
    1.32    | fix_mixfix decl = decl;
    1.33 +
    1.34  fun transform decl = let
    1.35          val (c, T, mx) = fix_mixfix decl;
    1.36 -        val c2 = "_cont_" ^ c;
    1.37 +        val c1 = Binding.name_of c;
    1.38 +        val c2 = "_cont_" ^ c1;
    1.39          val n  = Syntax.mixfix_args mx
    1.40 -    in     ((c ,               T,NoSyn),
    1.41 -            (c2,change_arrow n T,mx   ),
    1.42 -            trans_rules c2 c n mx) end;
    1.43 +    in     ((c, T, NoSyn),
    1.44 +            (Binding.name c2, change_arrow n T, mx),
    1.45 +            trans_rules c2 c1 n mx) end;
    1.46  
    1.47  fun cfun_arity (Type(n,[_,T])) = if n = @{type_name "->"} then 1+cfun_arity T else 0
    1.48  |   cfun_arity _               = 0;
    1.49 @@ -71,7 +75,7 @@
    1.50  |   is_contconst (_,_,Binder _) = false
    1.51  |   is_contconst (c,T,mx      ) = cfun_arity T >= Syntax.mixfix_args mx
    1.52                           handle ERROR msg => cat_error msg ("in mixfix annotation for " ^
    1.53 -                                               quote (Syntax.const_name mx c));
    1.54 +                                               quote (Syntax.const_name mx (Binding.name_of c)));
    1.55  
    1.56  
    1.57  (* add_consts(_i) *)
    1.58 @@ -83,7 +87,7 @@
    1.59      val transformed_decls = map transform contconst_decls;
    1.60    in
    1.61      thy
    1.62 -    |> (Sign.add_consts_i o map (upd_first Binding.name))
    1.63 +    |> Sign.add_consts_i
    1.64        (normal_decls @ map first transformed_decls @ map second transformed_decls)
    1.65      |> Sign.add_trrules_i (maps third transformed_decls)
    1.66    end;
    1.67 @@ -98,7 +102,7 @@
    1.68  
    1.69  val _ =
    1.70    OuterSyntax.command "consts" "declare constants (HOLCF)" K.thy_decl
    1.71 -    (Scan.repeat1 P.const >> (Toplevel.theory o add_consts));
    1.72 +    (Scan.repeat1 P.const_binding >> (Toplevel.theory o add_consts));
    1.73  
    1.74  end;
    1.75