Type

# Main data types representing Types

data TyThing
data Type
data PredType
type ThetaType

## Constructing and deconstructing types

mkTyVarTy
mkTyVarTys
getTyVar
getTyVar_maybe
mkAppTy
mkAppTys
splitAppTy
splitAppTys
splitAppTy_maybe
repSplitAppTy_maybe
mkFunTy
mkFunTys
splitFunTy
splitFunTy_maybe
splitFunTys
splitFunTysN
funResultTy
funArgTy
zipFunTys
mkTyConApp
mkTyConTy
tyConAppTyCon
tyConAppArgs
splitTyConApp_maybe
splitTyConApp
mkForAllTy
mkForAllTys
splitForAllTy_maybe
splitForAllTys
applyTy
applyTys
applyTysD
isForAllTy
dropForAlls
newTyConInstRhs
carefullySplitNewType_maybe
tyFamInsts
predFamInsts
mkPredTy
mkPredTys
mkFamilyTyConApp

## Common type constructors

funTyCon

## Predicates on types

isTyVarTy
isFunTy
isUnLiftedType
isUnboxedTupleType
isAlgType
isClosedAlgType
isPrimitiveType
isStrictType
isStrictPred

# Main data types representing Kinds

type Kind
type SimpleKind
type KindVar

## Deconstructing Kinds

kindFunResult
splitKindFunTys
splitKindFunTysN

## Common Kinds and SuperKinds

liftedTypeKind
unliftedTypeKind
openTypeKind
argTypeKind
ubxTupleKind
tySuperKind
coSuperKind

## Common Kind type constructors

liftedTypeKindTyCon
openTypeKindTyCon
unliftedTypeKindTyCon
argTypeKindTyCon
ubxTupleKindTyCon

## Predicates on Kinds

isLiftedTypeKind
isUnliftedTypeKind
isOpenTypeKind
isUbxTupleKind
isArgTypeKind
isKind
isTySuperKind
isCoSuperKind
isSuperKind
isCoercionKind
isEqPred
mkArrowKind
mkArrowKinds
isSubArgTypeKind
isSubOpenTypeKind
isSubKind
defaultKind
eqKind
isSubKindCon

# Type free variables

tyVarsOfType
tyVarsOfTypes
tyVarsOfPred
tyVarsOfTheta
typeKind

# Tidying type related things up for printing

tidyType
tidyTypes
tidyOpenType
tidyOpenTypes
tidyTyVarBndr
tidyFreeTyVars
tidyOpenTyVar
tidyOpenTyVars
tidyTopType
tidyPred
tidyKind

# Type comparison

coreEqType
tcEqType
tcEqTypes
tcCmpType
tcCmpTypes
tcEqPred
tcEqPredX
tcCmpPred
tcEqTypeX
tcPartOfType
tcPartOfPred

# Forcing evaluation of types

seqType
seqTypes

# Other views onto Types

coreView
tcView
kindView
repType

# Type representation for the code generator

data PrimRep
typePrimRep
predTypeRep

# Main type substitution data types

type TvSubstEnv
data TvSubst

## Manipulating type substitutions

emptyTvSubstEnv
emptyTvSubst
mkTvSubst
mkOpenTvSubst
zipOpenTvSubst
zipTopTvSubst
mkTopTvSubst
notElemTvSubst
getTvSubstEnv
setTvSubstEnv
getTvInScope
extendTvInScope
extendTvSubst
extendTvSubstList
isInScope
composeTvSubst
zipTyEnv
isEmptyTvSubst

## Performing substitution on types

substTy
substTys
substTyWith
substTysWith
substTheta
substPred
substTyVar
substTyVars
substTyVarBndr
deShadowTy
lookupTyVar

# Pretty-printing

pprType
pprParendType
pprTypeApp
pprTyThingCategory
pprTyThing
pprForAll
pprPred
pprTheta
pprThetaArrow
pprClassPred
pprKind
pprParendKind
pprSourceTyCon