Safe Haskell | None |
---|---|
Language | GHC2021 |
Typechecking user-specified MonoTypes
Synopsis
- kcClassSigType :: [LocatedN Name] -> LHsSigType GhcRn -> TcM ()
- tcClassSigType :: [LocatedN Name] -> LHsSigType GhcRn -> TcM Type
- tcHsSigType :: UserTypeCtxt -> LHsSigType GhcRn -> TcM Type
- tcHsSigWcType :: UserTypeCtxt -> LHsSigWcType GhcRn -> TcM Type
- tcHsPartialSigType :: UserTypeCtxt -> LHsSigWcType GhcRn -> TcM ([(Name, TcTyVar)], Maybe TcType, [(Name, InvisTVBinder)], TcThetaType, TcType)
- tcStandaloneKindSig :: LStandaloneKindSig GhcRn -> TcM (Name, Kind)
- funsSigCtxt :: [LocatedN Name] -> UserTypeCtxt
- addSigCtxt :: Outputable hs_ty => UserTypeCtxt -> LocatedA hs_ty -> TcM a -> TcM a
- pprSigCtxt :: Outputable hs_ty => UserTypeCtxt -> LocatedA hs_ty -> SDoc
- tcHsClsInstType :: UserTypeCtxt -> LHsSigType GhcRn -> TcM Type
- tcHsDefault :: LHsSigType GhcRn -> TcM ([TyVar], Class, [Type], [Kind])
- tcHsDeriv :: LHsSigType GhcRn -> TcM ([TyVar], Class, [Type], [Kind])
- tcDerivStrategy :: Maybe (LDerivStrategy GhcRn) -> TcM (Maybe (LDerivStrategy GhcTc), [TcTyVar])
- tcHsTypeApp :: LHsWcType GhcRn -> Kind -> TcM Type
- data UserTypeCtxt
- = FunSigCtxt Name ReportRedundantConstraints
- | InfSigCtxt Name
- | ExprSigCtxt ReportRedundantConstraints
- | KindSigCtxt
- | StandaloneKindSigCtxt Name
- | TypeAppCtxt
- | ConArgCtxt Name
- | TySynCtxt Name
- | PatSynCtxt Name
- | PatSigCtxt
- | RuleSigCtxt FastString Name
- | ForSigCtxt Name
- | DefaultDeclCtxt
- | InstDeclCtxt Bool
- | SpecInstCtxt
- | GenSigCtxt
- | GhciCtxt Bool
- | ClassSCCtxt Name
- | SigmaCtxt
- | DataTyCtxt Name
- | DerivClauseCtxt
- | TyVarBndrKindCtxt Name
- | DataKindCtxt Name
- | TySynKindCtxt Name
- | TyFamResKindCtxt Name
- bindImplicitTKBndrs_Tv :: [Name] -> TcM a -> TcM ([TcTyVar], a)
- bindImplicitTKBndrs_Skol :: SkolemInfo -> [Name] -> TcM a -> TcM ([TcTyVar], a)
- bindImplicitTKBndrs_Q_Tv :: [Name] -> TcM a -> TcM ([TcTyVar], a)
- bindImplicitTKBndrs_Q_Skol :: SkolemInfo -> [Name] -> TcM a -> TcM ([TcTyVar], a)
- bindExplicitTKBndrs_Tv :: OutputableBndrFlag flag 'Renamed => [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a)
- bindExplicitTKBndrs_Skol :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a)
- bindExplicitTKBndrs_Q_Tv :: OutputableBndrFlag flag 'Renamed => ContextKind -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a)
- bindExplicitTKBndrs_Q_Skol :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> ContextKind -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a)
- bindOuterFamEqnTKBndrs_Q_Tv :: HsOuterFamEqnTyVarBndrs GhcRn -> TcM a -> TcM (HsOuterFamEqnTyVarBndrs GhcTc, a)
- bindOuterFamEqnTKBndrs :: SkolemInfo -> HsOuterFamEqnTyVarBndrs GhcRn -> TcM a -> TcM (HsOuterFamEqnTyVarBndrs GhcTc, a)
- tcOuterTKBndrs :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> HsOuterTyVarBndrs flag GhcRn -> TcM a -> TcM (HsOuterTyVarBndrs flag GhcTc, a)
- scopedSortOuter :: HsOuterTyVarBndrs flag GhcTc -> TcM (HsOuterTyVarBndrs flag GhcTc)
- outerTyVars :: HsOuterTyVarBndrs flag GhcTc -> [TcTyVar]
- outerTyVarBndrs :: HsOuterTyVarBndrs Specificity GhcTc -> [InvisTVBinder]
- bindOuterSigTKBndrs_Tv :: HsOuterSigTyVarBndrs GhcRn -> TcM a -> TcM (HsOuterSigTyVarBndrs GhcTc, a)
- tcExplicitTKBndrs :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a)
- bindNamedWildCardBinders :: [Name] -> ([(Name, TcTyVar)] -> TcM a) -> TcM a
- bindTyClTyVars :: Name -> ([TcTyConBinder] -> TcKind -> TcM a) -> TcM a
- bindTyClTyVarsAndZonk :: Name -> ([TyConBinder] -> Kind -> TcM a) -> TcM a
- tcFamTyPats :: TyCon -> HsFamEqnPats GhcRn -> TcM (TcType, TcKind)
- etaExpandAlgTyCon :: TyConFlavour tc -> SkolemInfo -> [TcTyConBinder] -> Kind -> TcM ([TcTyConBinder], Kind)
- tcbVisibilities :: TyCon -> [Type] -> [TyConBndrVis]
- zonkAndScopedSort :: [TcTyVar] -> TcM [TcTyVar]
- data InitialKindStrategy
- data SAKS_or_CUSK
- data ContextKind
- kcDeclHeader :: InitialKindStrategy -> Name -> TyConFlavour TyCon -> LHsQTyVars GhcRn -> TcM ContextKind -> TcM TcTyCon
- checkForDuplicateScopedTyVars :: [(Name, TcTyVar)] -> TcM ()
- tcHsLiftedType :: LHsType GhcRn -> TcM TcType
- tcHsOpenType :: LHsType GhcRn -> TcM TcType
- tcHsLiftedTypeNC :: LHsType GhcRn -> TcM TcType
- tcHsOpenTypeNC :: LHsType GhcRn -> TcM TcType
- tcInferLHsType :: LHsType GhcRn -> TcM TcType
- tcInferLHsTypeKind :: LHsType GhcRn -> TcM (TcType, TcKind)
- tcInferLHsTypeUnsaturated :: LHsType GhcRn -> TcM (TcType, TcKind)
- tcCheckLHsTypeInContext :: LHsType GhcRn -> ContextKind -> TcM TcType
- tcCheckLHsType :: LHsType GhcRn -> TcKind -> TcM TcType
- tcHsContext :: Maybe (LHsContext GhcRn) -> TcM [PredType]
- tcLHsPredType :: LHsType GhcRn -> TcM PredType
- kindGeneralizeAll :: SkolemInfo -> TcType -> TcM [KindVar]
- tcLHsKindSig :: UserTypeCtxt -> LHsKind GhcRn -> TcM Kind
- checkDataKindSig :: DataSort -> Kind -> TcM ()
- data DataSort
- checkClassKindSig :: Kind -> TcM ()
- tcMult :: HsArrow GhcRn -> TcM Mult
- tcHsPatSigType :: UserTypeCtxt -> HoleMode -> HsPatSigType GhcRn -> ContextKind -> TcM ([(Name, TcTyVar)], [(Name, TcTyVar)], TcType)
- tcHsTyPat :: HsTyPat GhcRn -> Kind -> TcM ([(Name, TcTyVar)], [(Name, TcTyVar)], TcType)
- data HoleMode
- = HM_Sig
- | HM_FamPat
- | HM_VTA
- | HM_TyAppPat
- funAppCtxt :: (Outputable fun, Outputable arg) => fun -> arg -> Int -> SDoc
- addTyConFlavCtxt :: Name -> TyConFlavour tc -> TcM a -> TcM a
- tyLitFromLit :: HsLit GhcRn -> Maybe (HsTyLit GhcRn)
- tyLitFromOverloadedLit :: OverLitVal -> Maybe (HsTyLit GhcRn)
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 #
tcHsDefault :: LHsSigType GhcRn -> TcM ([TyVar], Class, [Type], [Kind]) Source #
:: 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
Instances
Eq UserTypeCtxt Source # | |
Defined in GHC.Tc.Types.Origin (==) :: UserTypeCtxt -> UserTypeCtxt -> Bool # (/=) :: UserTypeCtxt -> UserTypeCtxt -> Bool # |
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 :: OutputableBndrFlag flag 'Renamed => ContextKind -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], a) Source #
bindExplicitTKBndrs_Q_Skol :: OutputableBndrFlag flag 'Renamed => SkolemInfo -> ContextKind -> [LHsTyVarBndr flag GhcRn] -> TcM a -> TcM ([VarBndr TyVar flag], 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 #
tcFamTyPats :: TyCon -> HsFamEqnPats GhcRn -> TcM (TcType, TcKind) Source #
etaExpandAlgTyCon :: TyConFlavour tc -> SkolemInfo -> [TcTyConBinder] -> Kind -> TcM ([TcTyConBinder], Kind) Source #
tcbVisibilities :: TyCon -> [Type] -> [TyConBndrVis] Source #
data SAKS_or_CUSK Source #
Instances
Outputable SAKS_or_CUSK Source # | |
Defined in GHC.Tc.Gen.HsType ppr :: SAKS_or_CUSK -> SDoc Source # |
data ContextKind Source #
Describes the kind expected in a certain context.
Instances
Outputable ContextKind Source # | |
Defined in GHC.Tc.Gen.HsType ppr :: ContextKind -> SDoc Source # |
:: InitialKindStrategy | |
-> Name | of the thing being checked |
-> TyConFlavour TyCon | What sort of |
-> LHsQTyVars GhcRn | Binders in the header |
-> TcM ContextKind | The result kind |
-> TcM TcTyCon | A suitably-kinded TcTyCon |
tcCheckLHsTypeInContext :: 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
.
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 #
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 tc -> TcM a -> TcM a Source #
Add a "In the data declaration for T" or some such.
tyLitFromOverloadedLit :: OverLitVal -> Maybe (HsTyLit GhcRn) Source #