----------------------------------
Fix an existential-constructor bug
----------------------------------
MERGE INTO 5.00.2
This fixes a long-standing bug that made the strictness
analyser go into a loop if it met a recursive newtype:
newtype Void = MkVoid Void
-- we don't exploit it yet, so don't bother
Just (tycon,_,data_con,cmpnt_tys) -- Single constructor case
+ | isRecursiveTyCon tycon -- Recursive data type; don't unpack
+ -> wwStrict -- (this applies to newtypes too:
+ -- e.g. data Void = MkVoid Void)
+
| isNewTyCon tycon -- A newtype!
-> ASSERT( null (tail cmpnt_tys) )
let
wwUnpackNew demand
| null compt_strict_infos -- A nullary data type
- || isRecursiveTyCon tycon -- Recursive data type; don't unpack
-> wwStrict
| otherwise -- Some other data type