I looked through the mail archives a little bit. Unfortunately, it seems that a ~ b
does not preclude the possibility that a ~ [b]
, because this kind of nonsense is accepted:
type family G = [G]
As a result, in instance Combine a a
, when we call C a a
to find out what the return type ought to be, no reduction is possible: because we don't know anything about a
, we don't know yet whether to choose the C a a
or C a [a]
branch of the C
type family, and we can't do any reduction yet.
There's more details in this mailing list thread, which has a great deal of followups (that seem to be hard to find from the previous link) in the next month's by-thread archive. The whole situation actually seems a bit weird to me, though I'm not sure what a better solution would be.