Fix two related bugs in u_tys
authorsimonpj@microsoft.com <unknown>
Fri, 11 Dec 2009 12:01:22 +0000 (12:01 +0000)
committersimonpj@microsoft.com <unknown>
Fri, 11 Dec 2009 12:01:22 +0000 (12:01 +0000)
commitdcba7784a1af5fd0c054031c49fe159d69af4f86
tree602a9bbc98221971dafaa4511f13d8e1846d8cb8
parentab222dbdbf95e9a6a63dc4f8ed8cb7fc7784a991
Fix two related bugs in u_tys

When we normalise a type family application we must recursively call
uTys, *not* 'go', because the latter loop is only there to look
through type synonyms.  This bug made the type checker generate
ill-typed coercions, which were rejected by Core Lint.

A related bug only affects the size of coercions.  If faced with
  (m a) ~ (F b c)
where F has arity 1, we want to decompose to
   m ~ F Int,  a ~ c
rather than deferring.  The application decomposition was being
tried last, so we were missing this opportunity.

Thanks to Roman for an example that showed all this up.
compiler/typecheck/TcUnify.lhs