Safe Haskell | None |
---|---|
Language | Haskell2010 |
TcType
- type TcType = Type
- type TcSigmaType = TcType
- type TcRhoType = TcType
- type TcTauType = TcType
- type TcPredType = PredType
- type TcThetaType = ThetaType
- type TcTyVar = TyVar
- type TcTyVarSet = TyVarSet
- type TcDTyVarSet = DTyVarSet
- type TcTyCoVarSet = TyCoVarSet
- type TcDTyCoVarSet = DTyCoVarSet
- type TcKind = Kind
- type TcCoVar = CoVar
- type TcTyCoVar = Var
- type TcTyBinder = TyBinder
- data ExpType
- type ExpSigmaType = ExpType
- type ExpRhoType = ExpType
- mkCheckExpType :: TcType -> ExpType
- data SyntaxOpType
- synKnownType :: TcType -> SyntaxOpType
- mkSynFunTys :: [SyntaxOpType] -> ExpType -> SyntaxOpType
- newtype TcLevel = TcLevel Int
- topTcLevel :: TcLevel
- pushTcLevel :: TcLevel -> TcLevel
- isTopTcLevel :: TcLevel -> Bool
- strictlyDeeperThan :: TcLevel -> TcLevel -> Bool
- sameDepthAs :: TcLevel -> TcLevel -> Bool
- fmvTcLevel :: TcLevel -> TcLevel
- data UserTypeCtxt
- = FunSigCtxt Name Bool
- | InfSigCtxt Name
- | ExprSigCtxt
- | TypeAppCtxt
- | ConArgCtxt Name
- | TySynCtxt Name
- | PatSynCtxt Name
- | PatSigCtxt
- | RuleSigCtxt Name
- | ResSigCtxt
- | ForSigCtxt Name
- | DefaultDeclCtxt
- | InstDeclCtxt
- | SpecInstCtxt
- | ThBrackCtxt
- | GenSigCtxt
- | GhciCtxt
- | ClassSCCtxt Name
- | SigmaCtxt
- | DataTyCtxt Name
- pprUserTypeCtxt :: UserTypeCtxt -> SDoc
- pprSigCtxt :: UserTypeCtxt -> SDoc -> SDoc -> SDoc
- isSigMaybe :: UserTypeCtxt -> Maybe Name
- data TcTyVarDetails
- pprTcTyVarDetails :: TcTyVarDetails -> SDoc
- vanillaSkolemTv :: TcTyVarDetails
- superSkolemTv :: TcTyVarDetails
- data MetaDetails
- data MetaInfo
- = TauTv
- | SigTv
- | FlatMetaTv
- data TauTvFlavour
- isImmutableTyVar :: TyVar -> Bool
- isSkolemTyVar :: TcTyVar -> Bool
- isMetaTyVar :: TcTyVar -> Bool
- isMetaTyVarTy :: TcType -> Bool
- isTyVarTy :: Type -> Bool
- isSigTyVar :: Var -> Bool
- isOverlappableTyVar :: TcTyVar -> Bool
- isTyConableTyVar :: TcTyVar -> Bool
- isFskTyVar :: TcTyVar -> Bool
- isFmvTyVar :: TcTyVar -> Bool
- isFlattenTyVar :: TcTyVar -> Bool
- isAmbiguousTyVar :: TcTyVar -> Bool
- metaTvRef :: TyVar -> IORef MetaDetails
- metaTyVarInfo :: TcTyVar -> MetaInfo
- isFlexi :: MetaDetails -> Bool
- isIndirect :: MetaDetails -> Bool
- isRuntimeUnkSkol :: TyVar -> Bool
- metaTyVarTcLevel :: TcTyVar -> TcLevel
- setMetaTyVarTcLevel :: TcTyVar -> TcLevel -> TcTyVar
- metaTyVarTcLevel_maybe :: TcTyVar -> Maybe TcLevel
- isTouchableMetaTyVar :: TcLevel -> TcTyVar -> Bool
- isTouchableOrFmv :: TcLevel -> TcTyVar -> Bool
- isFloatedTouchableMetaTyVar :: TcLevel -> TcTyVar -> Bool
- canUnifyWithPolyType :: DynFlags -> TcTyVarDetails -> Bool
- mkPhiTy :: [PredType] -> Type -> Type
- mkInvSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
- mkSpecSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
- mkSigmaTy :: [TyBinder] -> [PredType] -> Type -> Type
- mkNakedTyConApp :: TyCon -> [Type] -> Type
- mkNakedAppTys :: Type -> [Type] -> Type
- mkNakedAppTy :: Type -> Type -> Type
- mkNakedFunTy :: Type -> Type -> Type
- mkNakedSpecSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
- mkNakedCastTy :: Type -> Coercion -> Type
- mkNakedPhiTy :: [PredType] -> Type -> Type
- getTyVar :: String -> Type -> TyVar
- tcSplitForAllTy_maybe :: Type -> Maybe (TyBinder, Type)
- tcSplitForAllTys :: Type -> ([TyVar], Type)
- tcSplitPiTys :: Type -> ([TyBinder], Type)
- tcSplitNamedPiTys :: Type -> ([TyBinder], Type)
- tcSplitPhiTy :: Type -> (ThetaType, Type)
- tcSplitPredFunTy_maybe :: Type -> Maybe (PredType, Type)
- tcSplitFunTy_maybe :: Type -> Maybe (Type, Type)
- tcSplitFunTys :: Type -> ([Type], Type)
- tcFunArgTy :: Type -> Type
- tcFunResultTy :: Type -> Type
- tcSplitFunTysN :: TcRhoType -> Arity -> ([TcSigmaType], TcSigmaType)
- tcSplitTyConApp :: Type -> (TyCon, [Type])
- tcSplitTyConApp_maybe :: Type -> Maybe (TyCon, [Type])
- tcRepSplitTyConApp_maybe :: Type -> Maybe (TyCon, [Type])
- tcTyConAppTyCon :: Type -> TyCon
- tcTyConAppArgs :: Type -> [Type]
- tcSplitAppTy_maybe :: Type -> Maybe (Type, Type)
- tcSplitAppTy :: Type -> (Type, Type)
- tcSplitAppTys :: Type -> (Type, [Type])
- tcRepSplitAppTy_maybe :: Type -> Maybe (Type, Type)
- tcGetTyVar_maybe :: Type -> Maybe TyVar
- tcGetTyVar :: String -> Type -> TyVar
- nextRole :: Type -> Role
- tcSplitSigmaTy :: Type -> ([TyVar], ThetaType, Type)
- tcDeepSplitSigmaTy_maybe :: TcSigmaType -> Maybe ([TcType], [TyVar], ThetaType, TcSigmaType)
- eqType :: Type -> Type -> Bool
- eqTypes :: [Type] -> [Type] -> Bool
- cmpType :: Type -> Type -> Ordering
- cmpTypes :: [Type] -> [Type] -> Ordering
- eqTypeX :: RnEnv2 -> Type -> Type -> Bool
- pickyEqType :: TcType -> TcType -> Bool
- tcEqType :: TcType -> TcType -> Bool
- tcEqKind :: TcKind -> TcKind -> Bool
- tcEqTypeNoKindCheck :: TcType -> TcType -> Bool
- tcEqTypeVis :: TcType -> TcType -> Maybe VisibilityFlag
- isSigmaTy :: TcType -> Bool
- isRhoTy :: TcType -> Bool
- isRhoExpTy :: ExpType -> Bool
- isOverloadedTy :: Type -> Bool
- isFloatingTy :: Type -> Bool
- isDoubleTy :: Type -> Bool
- isFloatTy :: Type -> Bool
- isIntTy :: Type -> Bool
- isWordTy :: Type -> Bool
- isStringTy :: Type -> Bool
- isIntegerTy :: Type -> Bool
- isBoolTy :: Type -> Bool
- isUnitTy :: Type -> Bool
- isCharTy :: Type -> Bool
- isTauTy :: Type -> Bool
- isTauTyCon :: TyCon -> Bool
- tcIsTyVarTy :: Type -> Bool
- tcIsForAllTy :: Type -> Bool
- isPredTy :: Type -> Bool
- isTyVarClassPred :: PredType -> Bool
- isTyVarExposed :: TcTyVar -> TcType -> Bool
- isTyVarUnderDatatype :: TcTyVar -> TcType -> Bool
- checkValidClsArgs :: Bool -> Class -> [KindOrType] -> Bool
- hasTyVarHead :: Type -> Bool
- isRigidEqPred :: TcLevel -> PredTree -> Bool
- isRigidTy :: TcType -> Bool
- deNoteType :: Type -> Type
- occurCheckExpand :: DynFlags -> TcTyVar -> Type -> OccCheckResult Type
- data OccCheckResult a
- = OC_OK a
- | OC_Forall
- | OC_NonTyVar
- | OC_Occurs
- orphNamesOfType :: Type -> NameSet
- orphNamesOfCo :: Coercion -> NameSet
- orphNamesOfTypes :: [Type] -> NameSet
- orphNamesOfCoCon :: CoAxiom br -> NameSet
- getDFunTyKey :: Type -> OccName
- evVarPred_maybe :: EvVar -> Maybe PredType
- evVarPred :: EvVar -> PredType
- mkMinimalBySCs :: [PredType] -> [PredType]
- transSuperClasses :: PredType -> [PredType]
- pickQuantifiablePreds :: TyVarSet -> TcThetaType -> TcThetaType
- immSuperClasses :: Class -> [Type] -> [PredType]
- isImprovementPred :: PredType -> Bool
- tcTyFamInsts :: Type -> [(TyCon, [Type])]
- exactTyCoVarsOfType :: Type -> TyCoVarSet
- exactTyCoVarsOfTypes :: [Type] -> TyVarSet
- allBoundVariables :: Type -> TyVarSet
- allBoundVariabless :: [Type] -> TyVarSet
- isFFIArgumentTy :: DynFlags -> Safety -> Type -> Validity
- isFFIImportResultTy :: DynFlags -> Type -> Validity
- isFFIExportResultTy :: Type -> Validity
- isFFIExternalTy :: Type -> Validity
- isFFIDynTy :: Type -> Type -> Validity
- isFFIPrimArgumentTy :: DynFlags -> Type -> Validity
- isFFIPrimResultTy :: DynFlags -> Type -> Validity
- isFFILabelTy :: Type -> Validity
- isFFITy :: Type -> Bool
- isFunPtrTy :: Type -> Bool
- tcSplitIOType_maybe :: Type -> Maybe (TyCon, Type)
- type Kind = Type
- typeKind :: Type -> Kind
- unliftedTypeKind :: Kind
- liftedTypeKind :: Kind
- constraintKind :: Kind
- isLiftedTypeKind :: Kind -> Bool
- isUnliftedTypeKind :: Kind -> Bool
- classifiesTypeWithValues :: Kind -> Bool
- data Type
- type PredType = Type
- type ThetaType = [PredType]
- data TyBinder
- data VisibilityFlag
- mkForAllTy :: TyBinder -> Type -> Type
- mkForAllTys :: [TyBinder] -> Type -> Type
- mkInvForAllTys :: [TyVar] -> Type -> Type
- mkSpecForAllTys :: [TyVar] -> Type -> Type
- mkNamedForAllTy :: TyVar -> VisibilityFlag -> Type -> Type
- mkFunTy :: Type -> Type -> Type
- mkFunTys :: [Type] -> Type -> Type
- mkTyConApp :: TyCon -> [Type] -> Type
- mkAppTy :: Type -> Type -> Type
- mkAppTys :: Type -> [Type] -> Type
- applyTys :: Type -> [KindOrType] -> Type
- mkTyConTy :: TyCon -> Type
- mkTyVarTy :: TyVar -> Type
- mkTyVarTys :: [TyVar] -> [Type]
- mkNamedBinder :: Var -> VisibilityFlag -> TyBinder
- isClassPred :: PredType -> Bool
- isEqPred :: PredType -> Bool
- isNomEqPred :: PredType -> Bool
- isIPPred :: PredType -> Bool
- mkClassPred :: Class -> [Type] -> PredType
- isDictLikeTy :: Type -> Bool
- tcSplitDFunTy :: Type -> ([TyVar], [Type], Class, [Type])
- tcSplitDFunHead :: Type -> (Class, [Type])
- isLevityVar :: TyVar -> Bool
- isLevityPolymorphic :: Kind -> Bool
- isLevityPolymorphic_maybe :: Kind -> Maybe TyVar
- isVisibleBinder :: TyBinder -> Bool
- isInvisibleBinder :: TyBinder -> Bool
- data TCvSubst = TCvSubst InScopeSet TvSubstEnv CvSubstEnv
- type TvSubstEnv = TyVarEnv Type
- emptyTCvSubst :: TCvSubst
- zipTvSubst :: [TyVar] -> [Type] -> TCvSubst
- mkTvSubstPrs :: [(TyVar, Type)] -> TCvSubst
- notElemTCvSubst :: Var -> TCvSubst -> Bool
- unionTCvSubst :: TCvSubst -> TCvSubst -> TCvSubst
- getTvSubstEnv :: TCvSubst -> TvSubstEnv
- setTvSubstEnv :: TCvSubst -> TvSubstEnv -> TCvSubst
- getTCvInScope :: TCvSubst -> InScopeSet
- extendTCvInScope :: TCvSubst -> Var -> TCvSubst
- extendTCvInScopeList :: TCvSubst -> [Var] -> TCvSubst
- extendTCvInScopeSet :: TCvSubst -> VarSet -> TCvSubst
- extendTCvSubstAndInScope :: TCvSubst -> TyCoVar -> Type -> TCvSubst
- lookupTyVar :: TCvSubst -> TyVar -> Maybe Type
- extendTCvSubst :: TCvSubst -> Var -> Type -> TCvSubst
- substTyVarBndr :: TCvSubst -> TyVar -> (TCvSubst, TyVar)
- extendTCvSubstList :: TCvSubst -> [Var] -> [Type] -> TCvSubst
- isInScope :: Var -> TCvSubst -> Bool
- mkTCvSubst :: InScopeSet -> (TvSubstEnv, CvSubstEnv) -> TCvSubst
- zipTyEnv :: [TyVar] -> [Type] -> TvSubstEnv
- zipCoEnv :: [CoVar] -> [Coercion] -> CvSubstEnv
- substTy :: (?callStack :: CallStack) => TCvSubst -> Type -> Type
- substTys :: TCvSubst -> [Type] -> [Type]
- substTyWith :: [TyVar] -> [Type] -> Type -> Type
- substTyWithCoVars :: [CoVar] -> [Coercion] -> Type -> Type
- substTyAddInScope :: TCvSubst -> Type -> Type
- substTyUnchecked :: TCvSubst -> Type -> Type
- substTheta :: TCvSubst -> ThetaType -> ThetaType
- isUnLiftedType :: Type -> Bool
- isUnboxedTupleType :: Type -> Bool
- isPrimitiveType :: Type -> Bool
- coreView :: Type -> Maybe Type
- tyCoVarsOfType :: Type -> TyCoVarSet
- tyCoVarsOfTypes :: [Type] -> TyCoVarSet
- closeOverKinds :: TyVarSet -> TyVarSet
- tyCoVarsOfTelescope :: [Var] -> TyCoVarSet -> TyCoVarSet
- tyCoVarsOfTypeAcc :: Type -> FV
- tyCoVarsOfTypesAcc :: [Type] -> FV
- tyCoVarsOfTypeDSet :: Type -> DTyCoVarSet
- tyCoVarsOfTypesDSet :: [Type] -> DTyCoVarSet
- closeOverKindsDSet :: DTyVarSet -> DTyVarSet
- tyCoVarsOfTypeList :: Type -> [TyCoVar]
- tyCoVarsOfTypesList :: [Type] -> [TyCoVar]
- toTcType :: Type -> TcType
- toTcTypeBag :: Bag EvVar -> Bag EvVar
- pprKind :: Kind -> SDoc
- pprParendKind :: Kind -> SDoc
- pprSigmaType :: Type -> SDoc
- pprType :: Type -> SDoc
- pprParendType :: Type -> SDoc
- pprTypeApp :: TyCon -> [Type] -> SDoc
- pprTyThingCategory :: TyThing -> SDoc
- pprTheta :: ThetaType -> SDoc
- pprThetaArrowTy :: ThetaType -> SDoc
- pprClassPred :: Class -> [Type] -> SDoc
- type TypeSize = IntWithInf
- sizeType :: Type -> TypeSize
- sizeTypes :: [Type] -> TypeSize
- toposortTyVars :: [TyVar] -> [TyVar]
Documentation
type TcSigmaType = TcType
type TcPredType = PredType
type TcThetaType = ThetaType
type TcTyVarSet = TyVarSet
type TcDTyVarSet = DTyVarSet
type TcTyCoVarSet = TyCoVarSet
type TcDTyCoVarSet = DTyCoVarSet
type TcTyBinder = TyBinder
data ExpType
An expected type to check against during type-checking. See Note [ExpType] in TcMType, where you'll also find manipulators.
Instances
type ExpSigmaType = ExpType
type ExpRhoType = ExpType
mkCheckExpType :: TcType -> ExpType
Make an ExpType
suitable for checking.
data SyntaxOpType
What to expect for an argument to a rebindable-syntax operator.
Quite like Type
, but allows for holes to be filled in by tcSyntaxOp.
The callback called from tcSyntaxOp gets a list of types; the meaning
of these types is determined by a left-to-right depth-first traversal
of the SyntaxOpType
tree. So if you pass in
SynAny `SynFun` (SynList `SynFun` SynType Int) `SynFun` SynAny
you'll get three types back: one for the first SynAny
, the element
type of the list, and one for the last SynAny
. You don't get anything
for the SynType
, because you've said positively that it should be an
Int, and so it shall be.
This is defined here to avoid defining it in TcExpr.hs-boot.
Constructors
SynAny | Any type |
SynRho | A rho type, deeply skolemised or instantiated as appropriate |
SynList | A list type. You get back the element type of the list |
SynFun SyntaxOpType SyntaxOpType infixr 0 | A function. |
SynType ExpType | A known type. |
synKnownType :: TcType -> SyntaxOpType
Like SynType
but accepts a regular TcType
mkSynFunTys :: [SyntaxOpType] -> ExpType -> SyntaxOpType
Like mkFunTys
but for SyntaxOpType
pushTcLevel :: TcLevel -> TcLevel
isTopTcLevel :: TcLevel -> Bool
strictlyDeeperThan :: TcLevel -> TcLevel -> Bool
sameDepthAs :: TcLevel -> TcLevel -> Bool
fmvTcLevel :: TcLevel -> TcLevel
data UserTypeCtxt
pprUserTypeCtxt :: UserTypeCtxt -> SDoc
pprSigCtxt :: UserTypeCtxt -> SDoc -> SDoc -> SDoc
isSigMaybe :: UserTypeCtxt -> Maybe Name
data TcTyVarDetails
data MetaInfo
Constructors
TauTv | |
SigTv | |
FlatMetaTv |
data TauTvFlavour
Constructors
VanillaTau | |
WildcardTau | A tyvar that originates from a type wildcard. |
isImmutableTyVar :: TyVar -> Bool
isSkolemTyVar :: TcTyVar -> Bool
isMetaTyVar :: TcTyVar -> Bool
isMetaTyVarTy :: TcType -> Bool
isSigTyVar :: Var -> Bool
isOverlappableTyVar :: TcTyVar -> Bool
isTyConableTyVar :: TcTyVar -> Bool
isFskTyVar :: TcTyVar -> Bool
True of FlatSkol skolems only
isFmvTyVar :: TcTyVar -> Bool
isFlattenTyVar :: TcTyVar -> Bool
True of both given and wanted flatten-skolems (fak and usk)
isAmbiguousTyVar :: TcTyVar -> Bool
metaTvRef :: TyVar -> IORef MetaDetails
metaTyVarInfo :: TcTyVar -> MetaInfo
isFlexi :: MetaDetails -> Bool
isIndirect :: MetaDetails -> Bool
isRuntimeUnkSkol :: TyVar -> Bool
metaTyVarTcLevel :: TcTyVar -> TcLevel
setMetaTyVarTcLevel :: TcTyVar -> TcLevel -> TcTyVar
isTouchableMetaTyVar :: TcLevel -> TcTyVar -> Bool
isTouchableOrFmv :: TcLevel -> TcTyVar -> Bool
isFloatedTouchableMetaTyVar :: TcLevel -> TcTyVar -> Bool
canUnifyWithPolyType :: DynFlags -> TcTyVarDetails -> Bool
mkInvSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
mkSpecSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
Make a sigma ty where all type variables are "specified". That is, they can be used with visible type application
mkNakedTyConApp :: TyCon -> [Type] -> Type
mkNakedAppTys :: Type -> [Type] -> Type
mkNakedAppTy :: Type -> Type -> Type
mkNakedFunTy :: Type -> Type -> Type
mkNakedSpecSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
mkNakedCastTy :: Type -> Coercion -> Type
mkNakedPhiTy :: [PredType] -> Type -> Type
getTyVar :: String -> Type -> TyVar
Attempts to obtain the type variable underlying a Type
, and panics with the
given message if this is not a type variable type. See also getTyVar_maybe
tcSplitForAllTy_maybe :: Type -> Maybe (TyBinder, Type)
tcSplitForAllTys :: Type -> ([TyVar], Type)
Like tcSplitPiTys
, but splits off only named binders, returning
just the tycovars.
tcSplitPiTys :: Type -> ([TyBinder], Type)
Splits a forall type into a list of TyBinder
s and the inner type.
Always succeeds, even if it returns an empty list.
tcSplitNamedPiTys :: Type -> ([TyBinder], Type)
Like tcSplitForAllTys
, but splits off only named binders.
tcSplitPhiTy :: Type -> (ThetaType, Type)
tcSplitPredFunTy_maybe :: Type -> Maybe (PredType, Type)
tcSplitFunTy_maybe :: Type -> Maybe (Type, Type)
tcSplitFunTys :: Type -> ([Type], Type)
tcFunArgTy :: Type -> Type
tcFunResultTy :: Type -> Type
tcSplitFunTysN :: TcRhoType -> Arity -> ([TcSigmaType], TcSigmaType)
tcSplitTyConApp :: Type -> (TyCon, [Type])
tcSplitTyConApp_maybe :: Type -> Maybe (TyCon, [Type])
tcRepSplitTyConApp_maybe :: Type -> Maybe (TyCon, [Type])
tcTyConAppTyCon :: Type -> TyCon
tcTyConAppArgs :: Type -> [Type]
tcSplitAppTy_maybe :: Type -> Maybe (Type, Type)
tcSplitAppTy :: Type -> (Type, Type)
tcSplitAppTys :: Type -> (Type, [Type])
tcRepSplitAppTy_maybe :: Type -> Maybe (Type, Type)
Does the AppTy split as in tcSplitAppTy_maybe
, but assumes that
any coreView stuff is already done. Refuses to look through (c => t)
tcGetTyVar_maybe :: Type -> Maybe TyVar
tcGetTyVar :: String -> Type -> TyVar
What is the role assigned to the next parameter of this type? Usually,
this will be Nominal
, but if the type is a TyConApp
, we may be able to
do better. The type does *not* have to be well-kinded when applied for this
to work!
tcSplitSigmaTy :: Type -> ([TyVar], ThetaType, Type)
Split a sigma type into its parts.
tcDeepSplitSigmaTy_maybe :: TcSigmaType -> Maybe ([TcType], [TyVar], ThetaType, TcSigmaType)
eqType :: Type -> Type -> Bool
Type equality on source types. Does not look through newtypes
or
PredType
s, but it does look through type synonyms.
This first checks that the kinds of the types are equal and then
checks whether the types are equal, ignoring casts and coercions.
(The kind check is a recursive call, but since all kinds have type
Type
, there is no need to check the types of kinds.)
See also Note [Non-trivial definitional equality] in TyCoRep.
eqTypes :: [Type] -> [Type] -> Bool
Type equality on lists of types, looking through type synonyms but not newtypes.
eqTypeX :: RnEnv2 -> Type -> Type -> Bool
Compare types with respect to a (presumably) non-empty RnEnv2
.
pickyEqType :: TcType -> TcType -> Bool
Like pickyEqTypeVis
, but returns a Bool for convenience
tcEqTypeNoKindCheck :: TcType -> TcType -> Bool
Just like tcEqType
, but will return True for types of different kinds
as long as their non-coercion structure is identical.
tcEqTypeVis :: TcType -> TcType -> Maybe VisibilityFlag
isOverloadedTy :: Type -> Bool
isFloatingTy :: Type -> Bool
Does a type represent a floating-point number?
isDoubleTy :: Type -> Bool
isStringTy :: Type -> Bool
Is a type String
?
isIntegerTy :: Type -> Bool
isTauTyCon :: TyCon -> Bool
tcIsTyVarTy :: Type -> Bool
tcIsForAllTy :: Type -> Bool
Is this a ForAllTy with a named binder?
isTyVarClassPred :: PredType -> Bool
isTyVarExposed :: TcTyVar -> TcType -> Bool
Does the given tyvar appear in the given type outside of any
non-newtypes? Assume we're looking for a
. Says "yes" for
a
, N a
, b a
, a b
, b (N a)
. Says "no" for
[a]
, Maybe a
, T a
, where N
is a newtype and T
is a datatype.
isTyVarUnderDatatype :: TcTyVar -> TcType -> Bool
Does the given tyvar appear under a type generative w.r.t. representational equality? See Note [Occurs check error] in TcCanonical for the motivation for this function.
checkValidClsArgs :: Bool -> Class -> [KindOrType] -> Bool
hasTyVarHead :: Type -> Bool
isRigidEqPred :: TcLevel -> PredTree -> Bool
True of all Nominal equalities that are solidly insoluble This means all equalities *except* * Meta-tv non-SigTv on LHS * Meta-tv SigTv on LHS, tyvar on right
deNoteType :: Type -> Type
occurCheckExpand :: DynFlags -> TcTyVar -> Type -> OccCheckResult Type
data OccCheckResult a
Constructors
OC_OK a | |
OC_Forall | |
OC_NonTyVar | |
OC_Occurs |
orphNamesOfType :: Type -> NameSet
orphNamesOfCo :: Coercion -> NameSet
orphNamesOfTypes :: [Type] -> NameSet
orphNamesOfCoCon :: CoAxiom br -> NameSet
getDFunTyKey :: Type -> OccName
evVarPred_maybe :: EvVar -> Maybe PredType
mkMinimalBySCs :: [PredType] -> [PredType]
transSuperClasses :: PredType -> [PredType]
pickQuantifiablePreds :: TyVarSet -> TcThetaType -> TcThetaType
When inferring types, should we quantify over a given predicate? Generally true of classes; generally false of equality constraints. Equality constraints that mention quantified type variables and implicit variables complicate the story. See Notes [Inheriting implicit parameters] and [Quantifying over equality constraints]
immSuperClasses :: Class -> [Type] -> [PredType]
isImprovementPred :: PredType -> Bool
Finding type instances
tcTyFamInsts :: Type -> [(TyCon, [Type])]
Finds outermost type-family applications occuring in a type, after expanding synonyms.
Finding "exact" (non-dead) type variables
exactTyCoVarsOfTypes :: [Type] -> TyVarSet
Extracting bound variables
allBoundVariables :: Type -> TyVarSet
Find all variables bound anywhere in a type. See also Note [Scope-check inferred kinds] in TcHsType
allBoundVariabless :: [Type] -> TyVarSet
isFFIArgumentTy :: DynFlags -> Safety -> Type -> Validity
isFFIImportResultTy :: DynFlags -> Type -> Validity
isFFIExportResultTy :: Type -> Validity
isFFIExternalTy :: Type -> Validity
isFFIDynTy :: Type -> Type -> Validity
isFFIPrimArgumentTy :: DynFlags -> Type -> Validity
isFFIPrimResultTy :: DynFlags -> Type -> Validity
isFFILabelTy :: Type -> Validity
isFunPtrTy :: Type -> Bool
tcSplitIOType_maybe :: Type -> Maybe (TyCon, Type)
isLiftedTypeKind :: Kind -> Bool
isUnliftedTypeKind :: Kind -> Bool
classifiesTypeWithValues :: Kind -> Bool
Does this classify a type allowed to have values? Responds True to things like *, #, TYPE Lifted, TYPE v, Constraint.
True of any sub-kind of OpenTypeKind
A type of the form p
of kind Constraint
represents a value whose type is
the Haskell predicate p
, where a predicate is what occurs before
the =>
in a Haskell type.
We use PredType
as documentation to mark those types that we guarantee to have
this kind.
It can be expanded into its representation, but:
- The type checker must treat it as opaque
- The rest of the compiler treats it as transparent
Consider these examples:
f :: (Eq a) => a -> Int g :: (?x :: Int -> Int) => a -> Int h :: (r\l) => {r} => {l::Int | r}
Here the Eq a
and ?x :: Int -> Int
and rl
are all called "predicates"
data TyBinder
A TyBinder
represents an argument to a function. TyBinders can be dependent
(Named
) or nondependent (Anon
). They may also be visible or not.
See also Note [TyBinder]
Instances
data VisibilityFlag
mkForAllTy :: TyBinder -> Type -> Type
mkForAllTys :: [TyBinder] -> Type -> Type
Wraps foralls over the type using the provided TyVar
s from left to right
mkInvForAllTys :: [TyVar] -> Type -> Type
Like mkForAllTys, but assumes all variables are dependent and invisible, a common case
mkSpecForAllTys :: [TyVar] -> Type -> Type
Like mkForAllTys, but assumes all variables are dependent and specified, a common case
mkNamedForAllTy :: TyVar -> VisibilityFlag -> Type -> Type
Make a dependent forall.
mkTyConApp :: TyCon -> [Type] -> Type
A key function: builds a TyConApp
or FunTy
as appropriate to
its arguments. Applies its arguments to the constructor from left to right.
applyTys :: Type -> [KindOrType] -> Type
This function is interesting because:
- The function may have more for-alls than there are args
- Less obviously, it may have fewer for-alls
For case 2. think of:
applyTys (forall a.a) [forall b.b, Int]
This really can happen, but only (I think) in situations involving
undefined. For example:
undefined :: forall a. a
Term: undefined (forall b. b->b)
Int
This term should have type (Int -> Int), but notice that
there are more type args than foralls in undefined
s type.
Create the plain type constructor type which has been applied to no type arguments at all.
mkTyVarTys :: [TyVar] -> [Type]
mkNamedBinder :: Var -> VisibilityFlag -> TyBinder
Make a named binder
isClassPred :: PredType -> Bool
isNomEqPred :: PredType -> Bool
mkClassPred :: Class -> [Type] -> PredType
isDictLikeTy :: Type -> Bool
tcSplitDFunHead :: Type -> (Class, [Type])
isLevityVar :: TyVar -> Bool
Is a tyvar of type Levity
?
isLevityPolymorphic :: Kind -> Bool
Tests whether the given type looks like "TYPE v", where v is a variable.
isLevityPolymorphic_maybe :: Kind -> Maybe TyVar
Retrieves a levity variable in the given kind, if the kind is of the form "TYPE v".
isVisibleBinder :: TyBinder -> Bool
Does this binder bind a visible argument?
isInvisibleBinder :: TyBinder -> Bool
Does this binder bind an invisible argument?
data TCvSubst
Type & coercion substitution
The following invariants must hold of a TCvSubst
:
- The in-scope set is needed only to guide the generation of fresh uniques
- In particular, the kind of the type variables in the in-scope set is not relevant
- The substitution is only applied ONCE! This is because in general such application will not reach a fixed point.
Constructors
TCvSubst InScopeSet TvSubstEnv CvSubstEnv |
Instances
zipTvSubst :: [TyVar] -> [Type] -> TCvSubst
Generates the in-scope set for the TCvSubst
from the types in the incoming
environment. No CoVars, please!
mkTvSubstPrs :: [(TyVar, Type)] -> TCvSubst
Generates the in-scope set for the TCvSubst
from the types in the
incoming environment. No CoVars, please!
notElemTCvSubst :: Var -> TCvSubst -> Bool
unionTCvSubst :: TCvSubst -> TCvSubst -> TCvSubst
getTvSubstEnv :: TCvSubst -> TvSubstEnv
setTvSubstEnv :: TCvSubst -> TvSubstEnv -> TCvSubst
getTCvInScope :: TCvSubst -> InScopeSet
extendTCvInScope :: TCvSubst -> Var -> TCvSubst
extendTCvInScopeList :: TCvSubst -> [Var] -> TCvSubst
extendTCvInScopeSet :: TCvSubst -> VarSet -> TCvSubst
extendTCvSubstAndInScope :: TCvSubst -> TyCoVar -> Type -> TCvSubst
lookupTyVar :: TCvSubst -> TyVar -> Maybe Type
extendTCvSubst :: TCvSubst -> Var -> Type -> TCvSubst
substTyVarBndr :: TCvSubst -> TyVar -> (TCvSubst, TyVar)
extendTCvSubstList :: TCvSubst -> [Var] -> [Type] -> TCvSubst
mkTCvSubst :: InScopeSet -> (TvSubstEnv, CvSubstEnv) -> TCvSubst
zipTyEnv :: [TyVar] -> [Type] -> TvSubstEnv
zipCoEnv :: [CoVar] -> [Coercion] -> CvSubstEnv
substTy :: (?callStack :: CallStack) => TCvSubst -> Type -> Type
Substitute within a Type
The substitution has to satisfy the invariants described in
Note [The substitution invariant].
substTyWith :: [TyVar] -> [Type] -> Type -> Type
Type substitution, see zipTvSubst
substTyWithCoVars :: [CoVar] -> [Coercion] -> Type -> Type
Substitute covars within a type
substTyAddInScope :: TCvSubst -> Type -> Type
Substitute within a Type
after adding the free variables of the type
to the in-scope set. This is useful for the case when the free variables
aren't already in the in-scope set or easily available.
See also Note [The substitution invariant].
substTyUnchecked :: TCvSubst -> Type -> Type
Substitute within a Type
disabling the sanity checks.
The problems that the sanity checks in substTy catch are described in
Note [The substitution invariant].
The goal of #11371 is to migrate all the calls of substTyUnchecked to
substTy and remove this function. Please don't use in new code.
substTheta :: TCvSubst -> ThetaType -> ThetaType
Substitute within a ThetaType
isUnLiftedType :: Type -> Bool
See Type for what an unlifted type is
isUnboxedTupleType :: Type -> Bool
isPrimitiveType :: Type -> Bool
Returns true of types that are opaque to Haskell.
coreView :: Type -> Maybe Type
This function Strips off the top layer only of a type synonym application (if any) its underlying representation type. Returns Nothing if there is nothing to look through.
By being non-recursive and inlined, this case analysis gets efficiently joined onto the case analysis that the caller is already doing
tyCoVarsOfType :: Type -> TyCoVarSet
Returns free variables of a type, including kind variables as a non-deterministic set. For type synonyms it does not expand the synonym.
tyCoVarsOfTypes :: [Type] -> TyCoVarSet
Returns free variables of types, including kind variables as a non-deterministic set. For type synonyms it does not expand the synonym.
closeOverKinds :: TyVarSet -> TyVarSet
Add the kind variables free in the kinds of the tyvars in the given set. Returns a non-deterministic set.
tyCoVarsOfTelescope :: [Var] -> TyCoVarSet -> TyCoVarSet
Gets the free vars of a telescope, scoped over a given free var set.
tyCoVarsOfTypeAcc :: Type -> FV
The worker for tyVarsOfType
and tyVarsOfTypeList
.
The previous implementation used unionVarSet
which is O(n+m) and can
make the function quadratic.
It's exported, so that it can be composed with
other functions that compute free variables.
See Note [FV naming conventions] in FV.
Eta-expanded because that makes it run faster (apparently)
tyCoVarsOfTypesAcc :: [Type] -> FV
tyCoVarsOfTypeDSet :: Type -> DTyCoVarSet
tyVarsOfType
that returns free variables of a type in a deterministic
set. For explanation of why using VarSet
is not deterministic see
Note [Deterministic FV] in FV.
tyCoVarsOfTypesDSet :: [Type] -> DTyCoVarSet
Returns free variables of types, including kind variables as a deterministic set. For type synonyms it does not expand the synonym.
closeOverKindsDSet :: DTyVarSet -> DTyVarSet
Add the kind variables free in the kinds of the tyvars in the given set. Returns a deterministic set.
tyCoVarsOfTypeList :: Type -> [TyCoVar]
tyVarsOfType
that returns free variables of a type in deterministic
order. For explanation of why using VarSet
is not deterministic see
Note [Deterministic FV] in FV.
tyCoVarsOfTypesList :: [Type] -> [TyCoVar]
Returns free variables of types, including kind variables as a deterministically ordered list. For type synonyms it does not expand the synonym.
toTcTypeBag :: Bag EvVar -> Bag EvVar
pprParendKind :: Kind -> SDoc
pprSigmaType :: Type -> SDoc
pprParendType :: Type -> SDoc
pprTypeApp :: TyCon -> [Type] -> SDoc
pprTyThingCategory :: TyThing -> SDoc
pprThetaArrowTy :: ThetaType -> SDoc
pprClassPred :: Class -> [Type] -> SDoc
type TypeSize = IntWithInf
toposortTyVars :: [TyVar] -> [TyVar]
Do a topological sort on a list of tyvars. This is a deterministic sorting operation (that is, doesn't depend on Uniques).