src/Tools/code/code_thingol.ML
changeset 24662 f79f6061525c
parent 24591 6509626eb2c9
child 24811 3bf788a0c49a
equal deleted inserted replaced
24661:a705b9834590 24662:f79f6061525c
    51   val unfold_const_app: iterm ->
    51   val unfold_const_app: iterm ->
    52     ((string * (dict list list * itype list)) * iterm list) option;
    52     ((string * (dict list list * itype list)) * iterm list) option;
    53   val collapse_let: ((vname * itype) * iterm) * iterm
    53   val collapse_let: ((vname * itype) * iterm) * iterm
    54     -> (iterm * itype) * (iterm * iterm) list;
    54     -> (iterm * itype) * (iterm * iterm) list;
    55   val eta_expand: (string * (dict list list * itype list)) * iterm list -> int -> iterm;
    55   val eta_expand: (string * (dict list list * itype list)) * iterm list -> int -> iterm;
       
    56   val contains_dictvar: iterm -> bool;
    56   val fold_constnames: (string -> 'a -> 'a) -> iterm -> 'a -> 'a;
    57   val fold_constnames: (string -> 'a -> 'a) -> iterm -> 'a -> 'a;
    57   val fold_varnames: (string -> 'a -> 'a) -> iterm -> 'a -> 'a;
    58   val fold_varnames: (string -> 'a -> 'a) -> iterm -> 'a -> 'a;
    58   val fold_unbound_varnames: (string -> 'a -> 'a) -> iterm -> 'a -> 'a;
    59   val fold_unbound_varnames: (string -> 'a -> 'a) -> iterm -> 'a -> 'a;
    59 
    60 
    60   datatype def =
    61   datatype def =
   229     val l = k - j;
   230     val l = k - j;
   230     val ctxt = (fold o fold_varnames) Name.declare ts Name.context;
   231     val ctxt = (fold o fold_varnames) Name.declare ts Name.context;
   231     val vs_tys = Name.names ctxt "a" ((curry Library.take l o curry Library.drop j) tys);
   232     val vs_tys = Name.names ctxt "a" ((curry Library.take l o curry Library.drop j) tys);
   232   in vs_tys `|--> IConst c `$$ ts @ map (fn (v, _) => IVar v) vs_tys end;
   233   in vs_tys `|--> IConst c `$$ ts @ map (fn (v, _) => IVar v) vs_tys end;
   233 
   234 
       
   235 fun contains_dictvar t =
       
   236   let
       
   237     fun contains (DictConst (_, dss)) = (fold o fold) contains dss
       
   238       | contains (DictVar _) = K true;
       
   239   in
       
   240     fold_aiterms
       
   241       (fn IConst (_, (dss, _)) => (fold o fold) contains dss | _ => I) t false
       
   242   end;
       
   243   
   234 
   244 
   235 (** definitions, transactions **)
   245 (** definitions, transactions **)
   236 
   246 
   237 type typscheme = (vname * sort) list * itype;
   247 type typscheme = (vname * sort) list * itype;
   238 datatype def =
   248 datatype def =