src/Pure/Isar/locale.ML
changeset 22339 0dc6b45e5662
parent 22300 596f49b70c70
child 22351 587845efb4cf
equal deleted inserted replaced
22338:c7feeba2249e 22339:0dc6b45e5662
   601     fun varify_parms (i, ps) = map (apsnd (varify i)) (param_types ps);
   601     fun varify_parms (i, ps) = map (apsnd (varify i)) (param_types ps);
   602     val parms = fixed_parms @ maps varify_parms idx_parmss;
   602     val parms = fixed_parms @ maps varify_parms idx_parmss;
   603 
   603 
   604     fun unify T U envir = Sign.typ_unify thy (U, T) envir
   604     fun unify T U envir = Sign.typ_unify thy (U, T) envir
   605       handle Type.TUNIFY =>
   605       handle Type.TUNIFY =>
   606         let val prt = Sign.string_of_typ thy in
   606         let 
       
   607           val T' = Envir.norm_type (fst envir) T;
       
   608           val U' = Envir.norm_type (fst envir) U;
       
   609           val prt = Sign.string_of_typ thy; 
       
   610         in
   607           raise TYPE ("unify_parms: failed to unify types " ^
   611           raise TYPE ("unify_parms: failed to unify types " ^
   608             prt U ^ " and " ^ prt T, [U, T], [])
   612             prt U' ^ " and " ^ prt T', [U', T'], [])
   609         end;
   613         end;
   610     fun unify_list (T :: Us) = fold (unify T) Us
   614     fun unify_list (T :: Us) = fold (unify T) Us
   611       | unify_list [] = I;
   615       | unify_list [] = I;
   612     val (unifier, _) = fold unify_list (map #2 (Symtab.dest (Symtab.make_list parms)))
   616     val (unifier, _) = fold unify_list (map #2 (Symtab.dest (Symtab.make_list parms)))
   613       (Vartab.empty, maxidx);
   617       (Vartab.empty, maxidx);