526 |
then (CONSTRAINTexp(e',ty),ty) |
then (CONSTRAINTexp(e',ty),ty) |
527 |
else (exp,WILDCARDty) |
else (exp,WILDCARDty) |
528 |
end |
end |
529 |
| HANDLEexp(e,HANDLER h) => |
| HANDLEexp(e, (rules, _)) => |
530 |
let val (e',ety) = expType(e,occ,region) |
let val (e',ety) = expType(e,occ,region) |
531 |
and (h',hty) = expType(h,occ,region) |
and (rules',rty,hty) = matchType (rules, occ, region) |
532 |
val exp' = HANDLEexp(e',HANDLER h') |
val exp' = HANDLEexp(e', (rules', rty)) |
533 |
in (unifyTy(hty, exnTy --> ety); (exp',ety)) |
in (unifyTy(hty, exnTy --> ety); (exp',ety)) |
534 |
handle Unify(mode) => |
handle Unify(mode) => |
535 |
(if unifyErr{ty1=domain(prune hty), name1="handler domain", |
(if unifyErr{ty1=domain(prune hty), name1="handler domain", |