Version 3 (modified by chak, 11 years ago) (diff)


Type Functions: Interface

Representation of family instances

The IfaceSyn.IfaceData variant of IfaceDecl contains a new ifFamInst :: Maybe IfaceFamInst field that is distinguishes ordinary data/newtype declarations from family instances. In the latter case, a IfaceFamInst value gives the instances head of the family instance. Moreover, all family instance heads of a module are collected in the new mi_fam_insts :: [(IfaceFamInst, IfaceDecl)] field of HscTypes.ModIface. We don't include the IfaceDecl component into IfaceFamInst, as we otherwise would get a cyclic dependency - the IfaceDecl must include IfaceFamInst, so that we can generate the correct wrapper signature for family data constructors during type checking the interface declarations.