Allow recursive unwrapping of data families
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 24 Jun 2015 21:54:27 +0000 (22:54 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 26 Jun 2015 07:33:05 +0000 (08:33 +0100)
commit0b7e538a09bc958474ec704063eaa08836e9270e
tree1e7e8caf4a59f89bab488e223a8c26940b27d2b1
parentff8a67164b294b5eb6caee38ec59e7e400e025dc
Allow recursive unwrapping of data families

When doing strictness analysis, we need to look inside products.
To avoid unpacking infinitely, we must be careful about
infinite types.  That in turn is controlled by TyCon.checkRecTc.

For data families like
   data instance T (a,b) = MkT a (T b)
we want to unpack the thing recursively for types like
  T (Int, (Int, (Int, Int)))

This patch elaborates the checkRecTc mechanism in TyCon, to
maintain a *count* of how many times a TyCon has shown up,
rather than just a boolean.

A simple change, and a useful one.  Fixes Trac #10482.
compiler/typecheck/FamInst.hs
compiler/types/Coercion.hs
compiler/types/FamInstEnv.hs
compiler/types/TyCon.hs