-- This function assumes that the types it creates have all parameters at
-- Representational role!
pcTyCon :: Bool -> RecFlag -> Bool -> Name -> Maybe CType -> [TyVar] -> [DataCon] -> TyCon
pcTyCon is_enum is_rec is_prom name cType tyvars cons
  = buildAlgTyCon name
        tyvars
        (map (const Representational) tyvars)
        cType
        []              -- No stupid theta
        (DataTyCon cons is_enum)
        is_rec
        is_prom
        False           -- Not in GADT syntax
        NoParentTyCon
pcTyCon :: Bool -> RecFlag -> Bool -> Name -> Maybe CType -> [TyVar] -> [DataCon] -> TyCon
pcTyCon is_enum is_rec is_prom name cType tyvars cons
  = buildAlgTyCon name
        tyvars
        (map (const Representational) tyvars)
        cType
        []              -- No stupid theta
        (DataTyCon cons is_enum)
        is_rec
        is_prom
        False           -- Not in GADT syntax
        NoParentTyCon
pcTyCon is_enum is_rec is_prom name cType tyvars cons
  = buildAlgTyCon name
        tyvars
        (map (const Representational) tyvars)
        cType
        []              -- No stupid theta
        (DataTyCon cons is_enum)
        is_rec
        is_prom
        False           -- Not in GADT syntax
        NoParentTyCon