771 |
771 |
772 |
772 |
773 |
773 |
774 (** Consts etc. **) |
774 (** Consts etc. **) |
775 |
775 |
776 fun add_typ_classes (Type (_, Ts), cs) = Library.foldr add_typ_classes (Ts, cs) |
776 fun add_typ_classes (Type (_, Ts), cs) = foldr add_typ_classes cs Ts |
777 | add_typ_classes (TFree (_, S), cs) = S union cs |
777 | add_typ_classes (TFree (_, S), cs) = S union cs |
778 | add_typ_classes (TVar (_, S), cs) = S union cs; |
778 | add_typ_classes (TVar (_, S), cs) = S union cs; |
779 |
779 |
780 fun add_typ_tycons (Type (c, Ts), cs) = Library.foldr add_typ_tycons (Ts, c ins cs) |
780 fun add_typ_tycons (Type (c, Ts), cs) = foldr add_typ_tycons (c ins cs) Ts |
781 | add_typ_tycons (_, cs) = cs; |
781 | add_typ_tycons (_, cs) = cs; |
782 |
782 |
783 val add_term_classes = it_term_types add_typ_classes; |
783 val add_term_classes = it_term_types add_typ_classes; |
784 val add_term_tycons = it_term_types add_typ_tycons; |
784 val add_term_tycons = it_term_types add_typ_tycons; |
785 |
785 |
838 | add_term_names (f$u, bs) = add_term_names (f, add_term_names(u, bs)) |
838 | add_term_names (f$u, bs) = add_term_names (f, add_term_names(u, bs)) |
839 | add_term_names (Abs(_,_,t), bs) = add_term_names(t,bs) |
839 | add_term_names (Abs(_,_,t), bs) = add_term_names(t,bs) |
840 | add_term_names (_, bs) = bs; |
840 | add_term_names (_, bs) = bs; |
841 |
841 |
842 (*Accumulates the TVars in a type, suppressing duplicates. *) |
842 (*Accumulates the TVars in a type, suppressing duplicates. *) |
843 fun add_typ_tvars(Type(_,Ts),vs) = Library.foldr add_typ_tvars (Ts,vs) |
843 fun add_typ_tvars(Type(_,Ts),vs) = foldr add_typ_tvars vs Ts |
844 | add_typ_tvars(TFree(_),vs) = vs |
844 | add_typ_tvars(TFree(_),vs) = vs |
845 | add_typ_tvars(TVar(v),vs) = v ins vs; |
845 | add_typ_tvars(TVar(v),vs) = v ins vs; |
846 |
846 |
847 (*Accumulates the TFrees in a type, suppressing duplicates. *) |
847 (*Accumulates the TFrees in a type, suppressing duplicates. *) |
848 fun add_typ_tfree_names(Type(_,Ts),fs) = Library.foldr add_typ_tfree_names (Ts,fs) |
848 fun add_typ_tfree_names(Type(_,Ts),fs) = foldr add_typ_tfree_names fs Ts |
849 | add_typ_tfree_names(TFree(f,_),fs) = f ins_string fs |
849 | add_typ_tfree_names(TFree(f,_),fs) = f ins_string fs |
850 | add_typ_tfree_names(TVar(_),fs) = fs; |
850 | add_typ_tfree_names(TVar(_),fs) = fs; |
851 |
851 |
852 fun add_typ_tfrees(Type(_,Ts),fs) = Library.foldr add_typ_tfrees (Ts,fs) |
852 fun add_typ_tfrees(Type(_,Ts),fs) = foldr add_typ_tfrees fs Ts |
853 | add_typ_tfrees(TFree(f),fs) = f ins fs |
853 | add_typ_tfrees(TFree(f),fs) = f ins fs |
854 | add_typ_tfrees(TVar(_),fs) = fs; |
854 | add_typ_tfrees(TVar(_),fs) = fs; |
855 |
855 |
856 fun add_typ_varnames(Type(_,Ts),nms) = Library.foldr add_typ_varnames (Ts,nms) |
856 fun add_typ_varnames(Type(_,Ts),nms) = foldr add_typ_varnames nms Ts |
857 | add_typ_varnames(TFree(nm,_),nms) = nm ins_string nms |
857 | add_typ_varnames(TFree(nm,_),nms) = nm ins_string nms |
858 | add_typ_varnames(TVar((nm,_),_),nms) = nm ins_string nms; |
858 | add_typ_varnames(TVar((nm,_),_),nms) = nm ins_string nms; |
859 |
859 |
860 (*Accumulates the TVars in a term, suppressing duplicates. *) |
860 (*Accumulates the TVars in a term, suppressing duplicates. *) |
861 val add_term_tvars = it_term_types add_typ_tvars; |
861 val add_term_tvars = it_term_types add_typ_tvars; |