src/Pure/pattern.ML
changeset 1435 aefcd255ed4a
parent 1029 27808dabf4af
child 1458 fd510875fb71
equal deleted inserted replaced
1434:834da5152421 1435:aefcd255ed4a
   182 
   182 
   183 val tsgr = ref(Type.tsig0);
   183 val tsgr = ref(Type.tsig0);
   184 
   184 
   185 fun unify_types(T,U, env as Envir.Envir{asol,iTs,maxidx}) =
   185 fun unify_types(T,U, env as Envir.Envir{asol,iTs,maxidx}) =
   186   if T=U then env
   186   if T=U then env
   187   else let val iTs' = Type.unify (!tsgr) ((U,T),iTs)
   187   else let val (iTs',maxidx') = Type.unify (!tsgr) maxidx iTs (U,T)
   188        in Envir.Envir{asol=asol,maxidx=maxidx,iTs=iTs'} end
   188        in Envir.Envir{asol=asol,maxidx=maxidx',iTs=iTs'} end
   189        handle Type.TUNIFY => raise Unif;
   189        handle Type.TUNIFY => raise Unif;
   190 
   190 
   191 fun unif binders (env,(s,t)) = case (devar env s,devar env t) of
   191 fun unif binders (env,(s,t)) = case (devar env s,devar env t) of
   192       (Abs(ns,Ts,ts),Abs(nt,Tt,tt)) =>
   192       (Abs(ns,Ts,ts),Abs(nt,Tt,tt)) =>
   193          let val name = if ns = "" then nt else ns
   193          let val name = if ns = "" then nt else ns