GHC.Tc.Gen.HsType
Typechecking user-specified MonoTypes
Documentation
kcClassSigType :: [LocatedN Name] -> LHsSigType GhcRn -> TcM () Source #
tcClassSigType :: [LocatedN Name] -> LHsSigType GhcRn -> TcM Type Source #
tcHsSigType :: UserTypeCtxt -> LHsSigType GhcRn -> TcM Type Source #
tcHsSigWcType :: UserTypeCtxt -> LHsSigWcType GhcRn -> TcM Type Source #
tcHsPartialSigType :: UserTypeCtxt -> LHsSigWcType GhcRn -> TcM ([(Name, TcTyVar)], Maybe TcType, [(Name, InvisTVBinder)], TcThetaType, TcType) Source #
tcStandaloneKindSig :: LStandaloneKindSig GhcRn -> TcM (Name, Kind) Source #
funsSigCtxt :: [LocatedN Name] -> UserTypeCtxt Source #
addSigCtxt :: Outputable hs_ty => UserTypeCtxt -> LocatedA hs_ty -> TcM a -> TcM a Source #
pprSigCtxt :: Outputable hs_ty => UserTypeCtxt -> LocatedA hs_ty -> SDoc Source #
tcHsClsInstType :: UserTypeCtxt -> LHsSigType GhcRn -> TcM Type Source #
Arguments
:: Maybe (LDerivStrategy GhcRn) | The deriving strategy |
-> TcM (Maybe (LDerivStrategy GhcTc), [TcTyVar]) | The typechecked deriving strategy and the tyvars that it binds
(if using |
Typecheck a deriving strategy. For most deriving strategies, this is a
no-op, but for the via
strategy, this requires typechecking the via
type.
data UserTypeCtxt Source #
UserTypeCtxt describes the origin of the polymorphic type in the places where we need an expression to have that type
Constructors
Instances
Eq UserTypeCtxt Source # | |
Defined in GHC.Tc.Types.Origin |
bindImplicitTKBndrs_Skol :: SkolemInfo -> [Name] -> TcM a -> TcM ([TcTyVar], a) Source #
bindImplicitTKBndrs_Q_Skol :: SkolemInfo -> [Name] -> TcM a -> TcM ([TcTyVar], a) Source #
bindExplicitTKBndrs_Tv :: OutputableBndrFlag flag 'Renamed => [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a) Source #
bindExplicitTKBndrs_Skol :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a) Source #
Skolemise the HsTyVarBndr
s in an HsForAllTelescope
with the supplied
TcTyMode
.
bindExplicitTKBndrs_Q_Tv :: ContextKind -> [LHsTyVarBndr () GhcRn] -> TcM a -> TcM ([TcTyVar], a) Source #
bindExplicitTKBndrs_Q_Skol :: SkolemInfo -> ContextKind -> [LHsTyVarBndr () GhcRn] -> TcM a -> TcM ([TcTyVar], a) Source #
bindOuterFamEqnTKBndrs_Q_Tv :: HsOuterFamEqnTyVarBndrs GhcRn -> TcM a -> TcM (HsOuterFamEqnTyVarBndrs GhcTc, a) Source #
bindOuterFamEqnTKBndrs :: SkolemInfo -> HsOuterFamEqnTyVarBndrs GhcRn -> TcM a -> TcM (HsOuterFamEqnTyVarBndrs GhcTc, a) Source #
tcOuterTKBndrs :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> HsOuterTyVarBndrs flag GhcRn -> TcM a -> TcM (HsOuterTyVarBndrs flag GhcTc, a) Source #
scopedSortOuter :: HsOuterTyVarBndrs flag GhcTc -> TcM (HsOuterTyVarBndrs flag GhcTc) Source #
outerTyVars :: HsOuterTyVarBndrs flag GhcTc -> [TcTyVar] Source #
bindOuterSigTKBndrs_Tv :: HsOuterSigTyVarBndrs GhcRn -> TcM a -> TcM (HsOuterSigTyVarBndrs GhcTc, a) Source #
tcExplicitTKBndrs :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a) Source #
bindTyClTyVars :: Name -> ([TcTyConBinder] -> TcKind -> TcM a) -> TcM a Source #
Bring into scope the binders of a PolyTcTyCon Used for the type variables of a type or class decl in the "kind checking" and "type checking" pass, but not in the initial-kind run.
bindTyClTyVarsAndZonk :: Name -> ([TyConBinder] -> Kind -> TcM a) -> TcM a Source #
etaExpandAlgTyCon :: TyConFlavour -> SkolemInfo -> [TcTyConBinder] -> Kind -> TcM ([TcTyConBinder], Kind) Source #
tcbVisibilities :: TyCon -> [Type] -> [TyConBndrVis] Source #
data InitialKindStrategy Source #
Constructors
InitialKindCheck SAKS_or_CUSK | |
InitialKindInfer |
data SAKS_or_CUSK Source #
Instances
Outputable SAKS_or_CUSK Source # | |
Defined in GHC.Tc.Gen.HsType Methods ppr :: SAKS_or_CUSK -> SDoc Source # |
data ContextKind Source #
Describes the kind expected in a certain context.
Arguments
:: InitialKindStrategy | |
-> Name | of the thing being checked |
-> TyConFlavour | What sort of |
-> LHsQTyVars GhcRn | Binders in the header |
-> TcM ContextKind | The result kind |
-> TcM TcTyCon | A suitably-kinded TcTyCon |
tcCheckLHsType :: LHsType GhcRn -> ContextKind -> TcM TcType Source #
tcHsContext :: Maybe (LHsContext GhcRn) -> TcM [PredType] Source #
kindGeneralizeAll :: SkolemInfo -> TcType -> TcM [KindVar] Source #
- Specialised version of
kindGeneralizeSome
, but with empty WantedConstraints, so no filtering is needed i.e. kindGeneraliseAll = kindGeneralizeSome emptyWC
tcLHsKindSig :: UserTypeCtxt -> LHsKind GhcRn -> TcM Kind Source #
checkDataKindSig :: DataSort -> Kind -> TcM () Source #
Checks that the return kind in a data declaration's kind signature is permissible. There are three cases:
If dealing with a data
, newtype
, data instance
, or newtype instance
declaration, check that the return kind is Type
.
If the declaration is a newtype
or newtype instance
and the
UnliftedNewtypes
extension is enabled, this check is slightly relaxed so
that a return kind of the form TYPE r
(for some r
) is permitted.
See Note [Implementation of UnliftedNewtypes]
in GHC.Tc.TyCl.
If dealing with a data family
declaration, check that the return kind is
either of the form:
TYPE r
(for somer
), ork
(wherek
is a bare kind variable; see #12369)
See also Note [Datatype return kinds] in GHC.Tc.TyCl
A description of whether something is a
data
ornewtype
(DataDeclSort
)data instance
ornewtype instance
(DataInstanceSort
)data family
(DataFamilySort
)
At present, this data type is only consumed by checkDataKindSig
.
Constructors
DataDeclSort NewOrData | |
DataInstanceSort NewOrData | |
DataFamilySort |
checkClassKindSig :: Kind -> TcM () Source #
Checks that the result kind of a class is exactly Constraint
, rejecting
type synonyms and type families that reduce to Constraint
. See #16826.
tcHsPatSigType :: UserTypeCtxt -> HoleMode -> HsPatSigType GhcRn -> ContextKind -> TcM ([(Name, TcTyVar)], [(Name, TcTyVar)], TcType) Source #
Constructors
HM_Sig | |
HM_FamPat | |
HM_VTA | |
HM_TyAppPat |
Instances
funAppCtxt :: (Outputable fun, Outputable arg) => fun -> arg -> Int -> SDoc Source #
Make an appropriate message for an error in a function argument. Used for both expressions and types.
addTyConFlavCtxt :: Name -> TyConFlavour -> TcM a -> TcM a Source #
Add a "In the data declaration for T" or some such.