import TcType ( isFFITy )
import DataCon ( dataConName, dataConFieldLabels, dataConWrapId_maybe )
import TyCon ( TyCon, makeTyConAbstract, tyConDataCons, isNewTyCon,
- newTyConRep, tyConSelIds, isAlgTyCon, isEnumerationTyCon )
+ newTyConRep, tyConSelIds, isAlgTyCon,
+ isEnumerationTyCon, isOpenTyCon )
import Class ( classSelIds )
import Module ( Module )
import HscTypes ( HscEnv(..), NameCache( nsUniqs ), CgGuts(..),
| isEnumerationTyCon tc -- For an enumeration, exposing the constructors
= True -- won't lead to the need for further exposure
-- (This includes data types with no constructors.)
+ | isOpenTyCon tc -- open type family
+ = True
| otherwise -- Newtype, datatype
= any exported_con (tyConDataCons tc)
-- Expose rep if any datacon or field is exported
tcTyClDecl1 _calc_isrec
(TyFunction {tcdLName = L _ tc_name, tcdTyVars = tvs, tcdKind = kind})
= tcTyVarBndrs tvs $ \ tvs' -> do
- { gla_exts <- doptM Opt_GlasgowExts
+ { traceTc (text "type family: " <+> ppr tc_name)
+ ; gla_exts <- doptM Opt_GlasgowExts
-- Check that we don't use kind signatures without Glasgow extensions
; checkTc gla_exts $ badSigTyDecl tc_name
-- kind signature for an indexed data type
tcTyClDecl1 _calc_isrec
(TyData {tcdND = new_or_data, tcdCtxt = ctxt, tcdTyVars = tvs,
- tcdLName = L _ tc_name, tcdKindSig = mb_ksig, tcdCons = []})
+ tcdLName = L _ tc_name, tcdKindSig = Just ksig, tcdCons = []})
= tcTyVarBndrs tvs $ \ tvs' -> do
- { extra_tvs <- tcDataKindSig mb_ksig
+ { traceTc (text "data/newtype family: " <+> ppr tc_name)
+ ; extra_tvs <- tcDataKindSig (Just ksig)
; let final_tvs = tvs' ++ extra_tvs -- we may not need these
; checkTc (null . unLoc $ ctxt) $ badKindSigCtxt tc_name