- NewType -> NewTyCon (mkNewTyConRep tycon)
- DataType | all isNullaryDataCon data_cons -> EnumTyCon
- | otherwise -> DataTyCon
+ NewType -> NewTyCon (mkNewTyConRep tycon)
+ DataType | all (null . dataConOrigArgTys) data_cons -> EnumTyCon
+ | otherwise -> DataTyCon
+ -- NB (null . dataConOrigArgTys). It used to say isNullaryDataCon
+ -- but that looks at the *representation* arity, and that in turn
+ -- depends on deciding whether to unpack the args, and that
+ -- depends on whether it's a data type or a newtype --- so
+ -- in the recursive case we can get a loop. This version is simple!
+
+buildTyConOrClass dflags is_rec kenv rec_vrcs rec_details
+ (ForeignType {tcdName = tycon_name, tcdExtName = tycon_ext_name})
+ = ATyCon (mkForeignTyCon tycon_name tycon_ext_name liftedTypeKind 0 [])