Safe Haskell | None |
---|---|
Language | Haskell98 |
- 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 TcKind = Kind
- type TcCoVar = CoVar
- newtype Untouchables = Untouchables Int
- noUntouchables :: Untouchables
- pushUntouchables :: Untouchables -> Untouchables
- isTouchable :: Untouchables -> Untouchables -> Bool
- data UserTypeCtxt
- pprUserTypeCtxt :: UserTypeCtxt -> SDoc
- data TcTyVarDetails
- pprTcTyVarDetails :: TcTyVarDetails -> SDoc
- vanillaSkolemTv :: TcTyVarDetails
- superSkolemTv :: TcTyVarDetails
- data MetaDetails
- data MetaInfo
- isImmutableTyVar :: TyVar -> Bool
- isSkolemTyVar :: TcTyVar -> Bool
- isMetaTyVar :: TcTyVar -> Bool
- isMetaTyVarTy :: TcType -> Bool
- isTyVarTy :: Type -> Bool
- isSigTyVar :: Var -> Bool
- isOverlappableTyVar :: TcTyVar -> Bool
- isTyConableTyVar :: TcTyVar -> Bool
- isFlatSkolTyVar :: TcTyVar -> Bool
- isAmbiguousTyVar :: TcTyVar -> Bool
- metaTvRef :: TyVar -> IORef MetaDetails
- metaTyVarInfo :: TcTyVar -> MetaInfo
- isFlexi :: MetaDetails -> Bool
- isIndirect :: MetaDetails -> Bool
- isRuntimeUnkSkol :: TyVar -> Bool
- isTypeVar :: Var -> Bool
- isKindVar :: Var -> Bool
- metaTyVarUntouchables :: TcTyVar -> Untouchables
- setMetaTyVarUntouchables :: TcTyVar -> Untouchables -> TcTyVar
- isTouchableMetaTyVar :: Untouchables -> TcTyVar -> Bool
- isFloatedTouchableMetaTyVar :: Untouchables -> TcTyVar -> Bool
- mkPhiTy :: [PredType] -> Type -> Type
- mkSigmaTy :: [TyVar] -> [PredType] -> Type -> Type
- mkTcEqPred :: TcType -> TcType -> Type
- tcView :: Type -> Maybe Type
- tcSplitForAllTys :: Type -> ([TyVar], 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])
- tcTyConAppTyCon :: Type -> TyCon
- tcTyConAppArgs :: Type -> [Type]
- tcSplitAppTy_maybe :: Type -> Maybe (Type, Type)
- tcSplitAppTy :: Type -> (Type, Type)
- tcSplitAppTys :: Type -> (Type, [Type])
- repSplitAppTy_maybe :: Type -> Maybe (Type, Type)
- tcInstHeadTyNotSynonym :: Type -> Bool
- tcInstHeadTyAppAllTyVars :: Type -> Bool
- tcGetTyVar_maybe :: Type -> Maybe TyVar
- tcGetTyVar :: String -> Type -> TyVar
- tcSplitSigmaTy :: Type -> ([TyVar], ThetaType, Type)
- tcDeepSplitSigmaTy_maybe :: TcSigmaType -> Maybe ([TcType], [TyVar], ThetaType, TcSigmaType)
- eqType :: Type -> Type -> Bool
- eqTypes :: [Type] -> [Type] -> Bool
- eqPred :: PredType -> PredType -> Bool
- cmpType :: Type -> Type -> Ordering
- cmpTypes :: [Type] -> [Type] -> Ordering
- cmpPred :: PredType -> PredType -> Ordering
- eqTypeX :: RnEnv2 -> Type -> Type -> Bool
- pickyEqType :: TcType -> TcType -> Bool
- tcEqType :: TcType -> TcType -> Bool
- tcEqKind :: TcKind -> TcKind -> Bool
- isSigmaTy :: Type -> Bool
- isOverloadedTy :: 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
- isSynFamilyTyConApp :: TcTauType -> Bool
- isPredTy :: Type -> Bool
- isTyVarClassPred :: PredType -> 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
- orphNamesOfDFunHead :: 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 :: Class -> [Type] -> [PredType]
- immSuperClasses :: Class -> [Type] -> [PredType]
- tcTyFamInsts :: Type -> [(TyCon, [Type])]
- exactTyVarsOfType :: Type -> TyVarSet
- exactTyVarsOfTypes :: [Type] -> TyVarSet
- isFFIArgumentTy :: DynFlags -> Safety -> Type -> Bool
- isFFIImportResultTy :: DynFlags -> Type -> Bool
- isFFIExportResultTy :: Type -> Bool
- isFFIExternalTy :: Type -> Bool
- isFFIDynTy :: Type -> Type -> Bool
- isFFIPrimArgumentTy :: DynFlags -> Type -> Bool
- isFFIPrimResultTy :: DynFlags -> Type -> Bool
- isFFILabelTy :: Type -> Bool
- isFFIDotnetTy :: DynFlags -> Type -> Bool
- isFFIDotnetObjTy :: Type -> Bool
- isFFITy :: Type -> Bool
- isFunPtrTy :: Type -> Bool
- tcSplitIOType_maybe :: Type -> Maybe (TyCon, Type)
- type Kind = Type
- typeKind :: Type -> Kind
- unliftedTypeKind :: Kind
- liftedTypeKind :: Kind
- openTypeKind :: Kind
- constraintKind :: Kind
- mkArrowKind :: Kind -> Kind -> Kind
- mkArrowKinds :: [Kind] -> Kind -> Kind
- isLiftedTypeKind :: Kind -> Bool
- isUnliftedTypeKind :: Kind -> Bool
- isSubOpenTypeKind :: Kind -> Bool
- tcIsSubKind :: Kind -> Kind -> Bool
- splitKindFunTys :: Kind -> ([Kind], Kind)
- defaultKind :: Kind -> Kind
- data Type
- type PredType = Type
- type ThetaType = [PredType]
- mkForAllTy :: TyVar -> Type -> Type
- mkForAllTys :: [TyVar] -> Type -> Type
- mkFunTy :: Type -> Type -> Type
- mkFunTys :: [Type] -> Type -> Type
- zipFunTys :: Outputable a => [a] -> Type -> ([(a, Type)], Type)
- mkTyConApp :: TyCon -> [Type] -> Type
- mkAppTy :: Type -> Type -> Type
- mkAppTys :: Type -> [Type] -> Type
- applyTy :: Type -> KindOrType -> Type
- applyTys :: Type -> [KindOrType] -> Type
- mkTyVarTy :: TyVar -> Type
- mkTyVarTys :: [TyVar] -> [Type]
- mkTyConTy :: TyCon -> Type
- isClassPred :: PredType -> Bool
- isEqPred :: PredType -> Bool
- isIPPred :: PredType -> Bool
- mkClassPred :: Class -> [Type] -> PredType
- isDictLikeTy :: Type -> Bool
- tcSplitDFunTy :: Type -> ([TyVar], [Type], Class, [Type])
- tcSplitDFunHead :: Type -> (Class, [Type])
- mkEqPred :: Type -> Type -> PredType
- data TvSubst = TvSubst InScopeSet TvSubstEnv
- type TvSubstEnv = TyVarEnv Type
- emptyTvSubst :: TvSubst
- mkOpenTvSubst :: TvSubstEnv -> TvSubst
- zipOpenTvSubst :: [TyVar] -> [Type] -> TvSubst
- zipTopTvSubst :: [TyVar] -> [Type] -> TvSubst
- mkTopTvSubst :: [(TyVar, Type)] -> TvSubst
- notElemTvSubst :: CoVar -> TvSubst -> Bool
- unionTvSubst :: TvSubst -> TvSubst -> TvSubst
- getTvSubstEnv :: TvSubst -> TvSubstEnv
- setTvSubstEnv :: TvSubst -> TvSubstEnv -> TvSubst
- getTvInScope :: TvSubst -> InScopeSet
- extendTvInScope :: TvSubst -> Var -> TvSubst
- lookupTyVar :: TvSubst -> TyVar -> Maybe Type
- extendTvSubst :: TvSubst -> TyVar -> Type -> TvSubst
- substTyVarBndr :: TvSubst -> TyVar -> (TvSubst, TyVar)
- extendTvSubstList :: TvSubst -> [TyVar] -> [Type] -> TvSubst
- isInScope :: Var -> TvSubst -> Bool
- mkTvSubst :: InScopeSet -> TvSubstEnv -> TvSubst
- zipTyEnv :: [TyVar] -> [Type] -> TvSubstEnv
- substTy :: TvSubst -> Type -> Type
- substTys :: TvSubst -> [Type] -> [Type]
- substTyWith :: [TyVar] -> [Type] -> Type -> Type
- substTheta :: TvSubst -> ThetaType -> ThetaType
- substTyVar :: TvSubst -> TyVar -> Type
- substTyVars :: TvSubst -> [TyVar] -> [Type]
- isUnLiftedType :: Type -> Bool
- isUnboxedTupleType :: Type -> Bool
- isPrimitiveType :: Type -> Bool
- tyVarsOfType :: Type -> VarSet
- tyVarsOfTypes :: [Type] -> TyVarSet
- closeOverKinds :: TyVarSet -> TyVarSet
- tcTyVarsOfType :: Type -> TcTyVarSet
- tcTyVarsOfTypes :: [Type] -> TyVarSet
- 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
Documentation
type TcSigmaType = TcType Source
type TcPredType = PredType Source
type TcThetaType = ThetaType Source
type TcTyVarSet = TyVarSet Source
isTouchable :: Untouchables -> Untouchables -> Bool Source
data UserTypeCtxt Source
data TcTyVarDetails Source
isImmutableTyVar :: TyVar -> Bool Source
isSkolemTyVar :: TcTyVar -> Bool Source
isMetaTyVar :: TcTyVar -> Bool Source
isMetaTyVarTy :: TcType -> Bool Source
isSigTyVar :: Var -> Bool Source
isOverlappableTyVar :: TcTyVar -> Bool Source
isTyConableTyVar :: TcTyVar -> Bool Source
isFlatSkolTyVar :: TcTyVar -> Bool Source
isAmbiguousTyVar :: TcTyVar -> Bool Source
metaTvRef :: TyVar -> IORef MetaDetails Source
metaTyVarInfo :: TcTyVar -> MetaInfo Source
isFlexi :: MetaDetails -> Bool Source
isIndirect :: MetaDetails -> Bool Source
isRuntimeUnkSkol :: TyVar -> Bool Source
isTouchableMetaTyVar :: Untouchables -> TcTyVar -> Bool Source
mkTcEqPred :: TcType -> TcType -> Type Source
tcView :: Type -> Maybe Type Source
Similar to coreView
, but for the type checker, which just looks through synonyms
tcSplitForAllTys :: Type -> ([TyVar], Type) Source
tcSplitPhiTy :: Type -> (ThetaType, Type) Source
tcSplitFunTys :: Type -> ([Type], Type) Source
tcFunArgTy :: Type -> Type Source
tcFunResultTy :: Type -> Type Source
tcSplitFunTysN :: TcRhoType -> Arity -> ([TcSigmaType], TcSigmaType) Source
tcSplitTyConApp :: Type -> (TyCon, [Type]) Source
tcTyConAppTyCon :: Type -> TyCon Source
tcTyConAppArgs :: Type -> [Type] Source
tcSplitAppTy :: Type -> (Type, Type) Source
tcSplitAppTys :: Type -> (Type, [Type]) Source
repSplitAppTy_maybe :: Type -> Maybe (Type, Type) Source
Does the AppTy split as in splitAppTy_maybe
, but assumes that
any Core view stuff is already done
tcInstHeadTyNotSynonym :: Type -> Bool Source
tcGetTyVar_maybe :: Type -> Maybe TyVar Source
tcGetTyVar :: String -> Type -> TyVar Source
tcDeepSplitSigmaTy_maybe :: TcSigmaType -> Maybe ([TcType], [TyVar], ThetaType, TcSigmaType) Source
eqType :: Type -> Type -> Bool Source
Type equality on source types. Does not look through newtypes
or
PredType
s, but it does look through type synonyms.
Watch out for horrible hack: See Note [Comparison with OpenTypeKind]
pickyEqType :: TcType -> TcType -> Bool Source
isOverloadedTy :: Type -> Bool Source
isDoubleTy :: Type -> Bool Source
isStringTy :: Type -> Bool Source
isIntegerTy :: Type -> Bool Source
isTauTyCon :: TyCon -> Bool Source
tcIsTyVarTy :: Type -> Bool Source
tcIsForAllTy :: Type -> Bool Source
isTyVarClassPred :: PredType -> Bool Source
deNoteType :: Type -> Type Source
occurCheckExpand :: DynFlags -> TcTyVar -> Type -> OccCheckResult Type Source
data OccCheckResult a Source
orphNamesOfType :: Type -> NameSet Source
orphNamesOfDFunHead :: Type -> NameSet Source
orphNamesOfCo :: Coercion -> NameSet Source
orphNamesOfTypes :: [Type] -> NameSet Source
orphNamesOfCoCon :: CoAxiom br -> NameSet Source
getDFunTyKey :: Type -> OccName Source
evVarPred_maybe :: EvVar -> Maybe PredType Source
mkMinimalBySCs :: [PredType] -> [PredType] Source
transSuperClasses :: Class -> [Type] -> [PredType] Source
immSuperClasses :: Class -> [Type] -> [PredType] Source
Finding type instances
tcTyFamInsts :: Type -> [(TyCon, [Type])] Source
Finds outermost type-family applications occuring in a type, after expanding synonyms.
Finding "exact" (non-dead) type variables
exactTyVarsOfType :: Type -> TyVarSet Source
exactTyVarsOfTypes :: [Type] -> TyVarSet Source
isFFIImportResultTy :: DynFlags -> Type -> Bool Source
isFFIExportResultTy :: Type -> Bool Source
isFFIExternalTy :: Type -> Bool Source
isFFIDynTy :: Type -> Type -> Bool Source
isFFIPrimArgumentTy :: DynFlags -> Type -> Bool Source
isFFIPrimResultTy :: DynFlags -> Type -> Bool Source
isFFILabelTy :: Type -> Bool Source
isFFIDotnetTy :: DynFlags -> Type -> Bool Source
isFFIDotnetObjTy :: Type -> Bool Source
isFunPtrTy :: Type -> Bool Source
The key type representing kinds in the compiler. Invariant: a kind is always in one of these forms:
FunTy k1 k2 TyConApp PrimTyCon [...] TyVar kv -- (during inference only) ForAll ... -- (for top-level coercions)
mkArrowKinds :: [Kind] -> Kind -> Kind Source
Iterated application of mkArrowKind
isLiftedTypeKind :: Kind -> Bool Source
isUnliftedTypeKind :: Kind -> Bool Source
isSubOpenTypeKind :: Kind -> Bool Source
True of any sub-kind of OpenTypeKind
tcIsSubKind :: Kind -> Kind -> Bool Source
splitKindFunTys :: Kind -> ([Kind], Kind) Source
Essentially splitFunTys
on kinds
defaultKind :: Kind -> Kind Source
The key representation of types within the compiler
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"
mkForAllTy :: TyVar -> Type -> Type Source
mkForAllTys :: [TyVar] -> Type -> Type Source
Wraps foralls over the type using the provided TyVar
s from left to right
mkFunTy :: Type -> Type -> Type infixr 3 Source
Creates a function type from the given argument and result type
zipFunTys :: Outputable a => [a] -> Type -> ([(a, Type)], Type) Source
Splits off argument types from the given type and associating them with the things in the input list from left to right. The final result type is returned, along with the resulting pairs of objects and types, albeit with the list of pairs in reverse order. Panics if there are not enough argument types for the input list.
mkTyConApp :: TyCon -> [Type] -> Type Source
A key function: builds a TyConApp
or FunTy
as apppropriate to
its arguments. Applies its arguments to the constructor from left to right.
applyTy :: Type -> KindOrType -> Type Source
Instantiate a forall type with one or more type arguments. Used when we have a polymorphic function applied to type args:
f t1 t2
We use applyTys type-of-f [t1,t2]
to compute the type of the expression.
Panics if no application is possible.
applyTys :: Type -> [KindOrType] -> Type Source
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.
mkTyVarTys :: [TyVar] -> [Type] Source
mkTyConTy :: TyCon -> Type Source
Create the plain type constructor type which has been applied to no type arguments at all.
isClassPred :: PredType -> Bool Source
mkClassPred :: Class -> [Type] -> PredType Source
isDictLikeTy :: Type -> Bool Source
tcSplitDFunHead :: Type -> (Class, [Type]) Source
Type substitution
The following invariants must hold of a TvSubst
:
- 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 substition is only applied ONCE! This is because in general such application will not reached a fixed point.
mkOpenTvSubst :: TvSubstEnv -> TvSubst Source
Generates the in-scope set for the TvSubst
from the types in the incoming
environment, hence "open"
zipOpenTvSubst :: [TyVar] -> [Type] -> TvSubst Source
Generates the in-scope set for the TvSubst
from the types in the incoming
environment, hence "open"
zipTopTvSubst :: [TyVar] -> [Type] -> TvSubst Source
mkTopTvSubst :: [(TyVar, Type)] -> TvSubst Source
Called when doing top-level substitutions. Here we expect that the free vars of the range of the substitution will be empty.
notElemTvSubst :: CoVar -> TvSubst -> Bool Source
unionTvSubst :: TvSubst -> TvSubst -> TvSubst Source
getTvSubstEnv :: TvSubst -> TvSubstEnv Source
setTvSubstEnv :: TvSubst -> TvSubstEnv -> TvSubst Source
getTvInScope :: TvSubst -> InScopeSet Source
extendTvInScope :: TvSubst -> Var -> TvSubst Source
mkTvSubst :: InScopeSet -> TvSubstEnv -> TvSubst Source
zipTyEnv :: [TyVar] -> [Type] -> TvSubstEnv Source
substTyWith :: [TyVar] -> [Type] -> Type -> Type Source
Type substitution making use of an TvSubst
that
is assumed to be open, see zipOpenTvSubst
substTyVar :: TvSubst -> TyVar -> Type Source
substTyVars :: TvSubst -> [TyVar] -> [Type] Source
isUnLiftedType :: Type -> Bool Source
See Type for what an unlifted type is
isUnboxedTupleType :: Type -> Bool Source
isPrimitiveType :: Type -> Bool Source
Returns true of types that are opaque to Haskell. Most of these are unlifted, but now that we interact with .NET, we may have primtive (foreign-imported) types that are lifted
tyVarsOfType :: Type -> VarSet Source
NB: for type synonyms tyVarsOfType does not expand the synonym tyVarsOfType returns only the free variables of a type For example, tyVarsOfType (a::k) returns {a}, not including the kind variable {k}
tyVarsOfTypes :: [Type] -> TyVarSet Source
closeOverKinds :: TyVarSet -> TyVarSet Source
tcTyVarsOfType :: Type -> TcTyVarSet Source
tcTyVarsOfTypes :: [Type] -> TyVarSet Source
pprParendKind :: Kind -> SDoc Source
pprSigmaType :: Type -> SDoc Source
pprParendType :: Type -> SDoc Source
pprTypeApp :: TyCon -> [Type] -> SDoc Source
pprTyThingCategory :: TyThing -> SDoc Source
pprThetaArrowTy :: ThetaType -> SDoc Source
pprClassPred :: Class -> [Type] -> SDoc Source