ghc-lib-parser-9.12.2.20250421: The GHC API, decoupled from GHC versions

Safe Haskell | Ignore
Language | GHC2021

GHC.Iface.Type

Synopsis

- type IfExtName = Name
- newtype IfLclName = IfLclName {
  - getIfLclName :: LexicalFastString
  }
- mkIfLclName :: FastString -> IfLclName
- ifLclNameFS :: IfLclName -> FastString
- data IfaceType
  - = IfaceFreeTyVar TyVar
  - | IfaceTyVar IfLclName
  - | IfaceLitTy IfaceTyLit
  - | IfaceAppTy IfaceType IfaceAppArgs
  - | IfaceFunTy FunTyFlag IfaceMult IfaceType IfaceType
  - | IfaceForAllTy IfaceForAllBndr IfaceType
  - | IfaceTyConApp IfaceTyCon IfaceAppArgs
  - | IfaceCastTy IfaceType IfaceCoercion
  - | IfaceCoercionTy IfaceCoercion
  - | IfaceTupleTy TupleSort PromotionFlag IfaceAppArgs
- type IfacePredType = IfaceType
- type IfaceKind = IfaceType
- data IfaceCoercion
  - = IfaceReflCo IfaceType
  - | IfaceGReflCo Role IfaceType IfaceMCoercion
  - | IfaceFunCo Role IfaceCoercion IfaceCoercion IfaceCoercion
  - | IfaceTyConAppCo Role IfaceTyCon [IfaceCoercion]
  - | IfaceAppCo IfaceCoercion IfaceCoercion
  - | IfaceForAllCo IfaceBndr !ForAllTyFlag !ForAllTyFlag IfaceCoercion IfaceCoercion
  - | IfaceCoVarCo IfLclName
  - | IfaceAxiomCo IfaceAxiomRule [IfaceCoercion]
  - | IfaceUnivCo UnivCoProvenance Role IfaceType IfaceType [IfaceCoercion]
  - | IfaceSymCo IfaceCoercion
  - | IfaceTransCo IfaceCoercion IfaceCoercion
  - | IfaceSelCo CoSel IfaceCoercion
  - | IfaceLRCo LeftOrRight IfaceCoercion
  - | IfaceInstCo IfaceCoercion IfaceCoercion
  - | IfaceKindCo IfaceCoercion
  - | IfaceSubCo IfaceCoercion
  - | IfaceFreeCoVar CoVar
  - | IfaceHoleCo CoVar
- data IfaceAxiomRule
  - = IfaceAR_X IfLclName
  - | IfaceAR_B IfExtName BranchIndex
  - | IfaceAR_U IfExtName
- data IfaceMCoercion
  - = IfaceMRefl
  - | IfaceMCo IfaceCoercion
- type IfaceMult = IfaceType
- data IfaceTyCon = IfaceTyCon {
  - ifaceTyConName :: IfExtName
  - ifaceTyConInfo :: !IfaceTyConInfo
  }
- data IfaceTyConInfo = IfaceTyConInfo {
  - ifaceTyConIsPromoted :: PromotionFlag
  - ifaceTyConSort :: IfaceTyConSort
  }
- mkIfaceTyConInfo :: PromotionFlag -> IfaceTyConSort -> IfaceTyConInfo
- data IfaceTyConSort
  - = IfaceNormalTyCon
  - | IfaceTupleTyCon !Arity !TupleSort
  - | IfaceSumTyCon !Arity
  - | IfaceEqualityTyCon
- data IfaceTyLit
  - = IfaceNumTyLit Integer
  - | IfaceStrTyLit LexicalFastString
  - | IfaceCharTyLit Char
- data IfaceAppArgs
  - = IA_Nil
  - | IA_Arg IfaceType ForAllTyFlag IfaceAppArgs
- type IfaceContext = [IfacePredType]
- data IfaceBndr
  - = IfaceIdBndr !IfaceIdBndr
  - | IfaceTvBndr !IfaceTvBndr
- data IfaceOneShot
  - = IfaceNoOneShot
  - | IfaceOneShot
- type IfaceLamBndr = (IfaceBndr, IfaceOneShot)
- type IfaceTvBndr = (IfLclName, IfaceKind)
- type IfaceIdBndr = (IfaceType, IfLclName, IfaceType)
- type IfaceTyConBinder = VarBndr IfaceBndr TyConBndrVis
- type IfaceForAllSpecBndr = VarBndr IfaceBndr Specificity
- type IfaceForAllBndr = VarBndr IfaceBndr ForAllTyFlag
- data ForAllTyFlag where
  - Invisible !Specificity
  - Required
  - pattern Specified :: ForAllTyFlag
  - pattern Inferred :: ForAllTyFlag
- data FunTyFlag
  - = FTF_T_T
  - | FTF_T_C
  - | FTF_C_T
  - | FTF_C_C
- data ShowForAllFlag
  - = ShowForAllMust
  - | ShowForAllWhen
- data ShowSub = ShowSub {
  - ss_how_much :: ShowHowMuch
  - ss_forall :: ShowForAllFlag
  }
- data ShowHowMuch
  - = ShowHeader AltPpr
  - | ShowSome (Maybe (OccName -> Bool)) AltPpr
  - | ShowIface
- newtype AltPpr = AltPpr (Maybe (OccName -> SDoc))
- mkIfaceForAllTvBndr :: ForAllTyFlag -> IfaceTvBndr -> IfaceForAllBndr
- mkIfaceTyConKind :: [IfaceTyConBinder] -> IfaceKind -> IfaceKind
- ifaceForAllSpecToBndrs :: [IfaceForAllSpecBndr] -> [IfaceForAllBndr]
- ifaceForAllSpecToBndr :: IfaceForAllSpecBndr -> IfaceForAllBndr
- ifForAllBndrVar :: IfaceForAllBndr -> IfaceBndr
- ifForAllBndrName :: IfaceForAllBndr -> IfLclName
- ifaceBndrName :: IfaceBndr -> IfLclName
- ifTyConBinderVar :: IfaceTyConBinder -> IfaceBndr
- ifTyConBinderName :: IfaceTyConBinder -> IfLclName
- putIfaceType :: WriteBinHandle -> IfaceType -> IO ()
- getIfaceType :: HasCallStack => ReadBinHandle -> IO IfaceType
- ifaceTypeSharedByte :: Word8
- isIfaceLiftedTypeKind :: IfaceKind -> Bool
- appArgsIfaceTypes :: IfaceAppArgs -> [IfaceType]
- appArgsIfaceTypesForAllTyFlags :: IfaceAppArgs -> [(IfaceType, ForAllTyFlag)]
- newtype SuppressBndrSig = SuppressBndrSig Bool
- newtype UseBndrParens = UseBndrParens Bool
- newtype PrintExplicitKinds = PrintExplicitKinds Bool
- pprIfaceType :: IfaceType -> SDoc
- pprParendIfaceType :: IfaceType -> SDoc
- pprPrecIfaceType :: PprPrec -> IfaceType -> SDoc
- pprIfaceContext :: PprPrec -> [IfacePredType] -> SDoc
- pprIfaceContextArr :: [IfacePredType] -> SDoc
- pprIfaceIdBndr :: IfaceIdBndr -> SDoc
- pprIfaceLamBndr :: IfaceLamBndr -> SDoc
- pprIfaceTvBndr :: IfaceTvBndr -> SuppressBndrSig -> UseBndrParens -> SDoc
- pprIfaceTyConBinders :: SuppressBndrSig -> [IfaceTyConBinder] -> SDoc
- pprIfaceBndrs :: [IfaceBndr] -> SDoc
- pprIfaceAppArgs :: IfaceAppArgs -> SDoc
- pprParendIfaceAppArgs :: IfaceAppArgs -> SDoc
- pprIfaceForAllPart :: [IfaceForAllBndr] -> [IfacePredType] -> SDoc -> SDoc
- pprIfaceForAllPartMust :: [IfaceForAllBndr] -> [IfacePredType] -> SDoc -> SDoc
- pprIfaceForAll :: [IfaceForAllBndr] -> SDoc
- pprIfaceSigmaType :: ShowForAllFlag -> IfaceType -> SDoc
- pprIfaceTyLit :: IfaceTyLit -> SDoc
- pprIfaceCoercion :: IfaceCoercion -> SDoc
- pprParendIfaceCoercion :: IfaceCoercion -> SDoc
- splitIfaceSigmaTy :: IfaceType -> ([IfaceForAllBndr], [IfacePredType], IfaceType)
- pprIfaceTypeApp :: PprPrec -> IfaceTyCon -> IfaceAppArgs -> SDoc
- pprUserIfaceForAll :: [IfaceForAllBndr] -> SDoc
- pprIfaceCoTcApp :: PprPrec -> IfaceTyCon -> [IfaceCoercion] -> SDoc
- pprTyTcApp :: PprPrec -> IfaceTyCon -> IfaceAppArgs -> SDoc
- pprIfacePrefixApp :: PprPrec -> SDoc -> [SDoc] -> SDoc
- isIfaceRhoType :: IfaceType -> Bool
- suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a]
- stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder]
- stripInvisArgs :: PrintExplicitKinds -> IfaceAppArgs -> IfaceAppArgs
- mkIfaceTySubst :: [(IfLclName, IfaceType)] -> IfaceTySubst
- substIfaceTyVar :: IfaceTySubst -> IfLclName -> IfaceType
- substIfaceAppArgs :: IfaceTySubst -> IfaceAppArgs -> IfaceAppArgs
- inDomIfaceTySubst :: IfaceTySubst -> IfaceTvBndr -> Bool
- many_ty :: IfaceType
- pprTypeArrow :: FunTyFlag -> IfaceMult -> SDoc

# Documentation

type IfExtName = Name Source #

newtype IfLclName Source #

A local name in iface syntax

Constructors

IfLclName |

Fields

- getIfLclName :: LexicalFastString

#### Instances

Instances details

NFData IfLclName Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfLclName -> () Source #
Show IfLclName Source # |
Instance details Defined in GHC.Iface.Type Methods showsPrec :: Int -> IfLclName -> ShowS Source # show :: IfLclName -> String Source # showList :: [IfLclName] -> ShowS Source #
Binary IfLclName Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfLclName -> IO () Source # put :: WriteBinHandle -> IfLclName -> IO (Bin IfLclName) Source # get :: ReadBinHandle -> IO IfLclName Source #
Outputable IfLclName Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfLclName -> SDoc Source #
Eq IfLclName Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfLclName -> IfLclName -> Bool Source # (/=) :: IfLclName -> IfLclName -> Bool Source #
Ord IfLclName Source # |
Instance details Defined in GHC.Iface.Type Methods compare :: IfLclName -> IfLclName -> Ordering Source # (<) :: IfLclName -> IfLclName -> Bool Source # (<=) :: IfLclName -> IfLclName -> Bool Source # (>) :: IfLclName -> IfLclName -> Bool Source # (>=) :: IfLclName -> IfLclName -> Bool Source # max :: IfLclName -> IfLclName -> IfLclName Source # min :: IfLclName -> IfLclName -> IfLclName Source #

mkIfLclName :: FastString -> IfLclName Source #

ifLclNameFS :: IfLclName -> FastString Source #

data IfaceType Source #

A kind of universal type, used for types and kinds.

Any time a `Type` is pretty-printed, it is first converted to an `IfaceType` before being printed. See Note [Pretty printing via Iface syntax] in GHC.Types.TyThing.Ppr

Constructors

IfaceFreeTyVar TyVar |
IfaceTyVar IfLclName |
IfaceLitTy IfaceTyLit |
IfaceAppTy IfaceType IfaceAppArgs |
IfaceFunTy FunTyFlag IfaceMult IfaceType IfaceType |
IfaceForAllTy IfaceForAllBndr IfaceType |
IfaceTyConApp IfaceTyCon IfaceAppArgs |
IfaceCastTy IfaceType IfaceCoercion |
IfaceCoercionTy IfaceCoercion |
IfaceTupleTy TupleSort PromotionFlag IfaceAppArgs |

#### Instances

Instances details

NFData IfaceType Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceType -> () Source #
Binary IfaceType Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceType -> IO () Source # put :: WriteBinHandle -> IfaceType -> IO (Bin IfaceType) Source # get :: ReadBinHandle -> IO IfaceType Source #
Outputable IfaceType Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceType -> SDoc Source #
Eq IfaceType Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceType -> IfaceType -> Bool Source # (/=) :: IfaceType -> IfaceType -> Bool Source #
Ord IfaceType Source # |
Instance details Defined in GHC.Iface.Type Methods compare :: IfaceType -> IfaceType -> Ordering Source # (<) :: IfaceType -> IfaceType -> Bool Source # (<=) :: IfaceType -> IfaceType -> Bool Source # (>) :: IfaceType -> IfaceType -> Bool Source # (>=) :: IfaceType -> IfaceType -> Bool Source # max :: IfaceType -> IfaceType -> IfaceType Source # min :: IfaceType -> IfaceType -> IfaceType Source #
Binary (DefMethSpec IfaceType) Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> DefMethSpec IfaceType -> IO () Source # put :: WriteBinHandle -> DefMethSpec IfaceType -> IO (Bin (DefMethSpec IfaceType)) Source # get :: ReadBinHandle -> IO (DefMethSpec IfaceType) Source #

type IfacePredType = IfaceType Source #

type IfaceKind = IfaceType Source #

data IfaceCoercion Source #

Constructors

IfaceReflCo IfaceType |
IfaceGReflCo Role IfaceType IfaceMCoercion |
IfaceFunCo Role IfaceCoercion IfaceCoercion IfaceCoercion |
IfaceTyConAppCo Role IfaceTyCon [IfaceCoercion] |
IfaceAppCo IfaceCoercion IfaceCoercion |
IfaceForAllCo IfaceBndr !ForAllTyFlag !ForAllTyFlag IfaceCoercion IfaceCoercion |
IfaceCoVarCo IfLclName |
IfaceAxiomCo IfaceAxiomRule [IfaceCoercion] | There are only a fixed number of CoAxiomRules, so it suffices to use an IfaceLclName to distinguish them. See Note [Adding built-in type families] in GHC.Builtin.Types.Literals
IfaceUnivCo UnivCoProvenance Role IfaceType IfaceType [IfaceCoercion] |
IfaceSymCo IfaceCoercion |
IfaceTransCo IfaceCoercion IfaceCoercion |
IfaceSelCo CoSel IfaceCoercion |
IfaceLRCo LeftOrRight IfaceCoercion |
IfaceInstCo IfaceCoercion IfaceCoercion |
IfaceKindCo IfaceCoercion |
IfaceSubCo IfaceCoercion |
IfaceFreeCoVar CoVar | See Note [Free TyVars and CoVars in IfaceType]
IfaceHoleCo CoVar | See Note [Holes in IfaceCoercion]

#### Instances

Instances details

NFData IfaceCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceCoercion -> () Source #
Binary IfaceCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceCoercion -> IO () Source # put :: WriteBinHandle -> IfaceCoercion -> IO (Bin IfaceCoercion) Source # get :: ReadBinHandle -> IO IfaceCoercion Source #
Outputable IfaceCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceCoercion -> SDoc Source #
Eq IfaceCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceCoercion -> IfaceCoercion -> Bool Source # (/=) :: IfaceCoercion -> IfaceCoercion -> Bool Source #
Ord IfaceCoercion Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceCoercion -> IfaceCoercion -> Ordering Source #

(<) :: IfaceCoercion -> IfaceCoercion -> Bool Source #

(<=) :: IfaceCoercion -> IfaceCoercion -> Bool Source #

(>) :: IfaceCoercion -> IfaceCoercion -> Bool Source #

(>=) :: IfaceCoercion -> IfaceCoercion -> Bool Source #

max :: IfaceCoercion -> IfaceCoercion -> IfaceCoercion Source #

min :: IfaceCoercion -> IfaceCoercion -> IfaceCoercion Source #

data IfaceAxiomRule Source #

Constructors

IfaceAR_X IfLclName |
IfaceAR_B IfExtName BranchIndex |
IfaceAR_U IfExtName |

#### Instances

Instances details

NFData IfaceAxiomRule Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceAxiomRule -> () Source #
Binary IfaceAxiomRule Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceAxiomRule -> IO () Source # put :: WriteBinHandle -> IfaceAxiomRule -> IO (Bin IfaceAxiomRule) Source # get :: ReadBinHandle -> IO IfaceAxiomRule Source #
Eq IfaceAxiomRule Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceAxiomRule -> IfaceAxiomRule -> Bool Source # (/=) :: IfaceAxiomRule -> IfaceAxiomRule -> Bool Source #
Ord IfaceAxiomRule Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceAxiomRule -> IfaceAxiomRule -> Ordering Source #

(<) :: IfaceAxiomRule -> IfaceAxiomRule -> Bool Source #

(<=) :: IfaceAxiomRule -> IfaceAxiomRule -> Bool Source #

(>) :: IfaceAxiomRule -> IfaceAxiomRule -> Bool Source #

(>=) :: IfaceAxiomRule -> IfaceAxiomRule -> Bool Source #

max :: IfaceAxiomRule -> IfaceAxiomRule -> IfaceAxiomRule Source #

min :: IfaceAxiomRule -> IfaceAxiomRule -> IfaceAxiomRule Source #

data IfaceMCoercion Source #

Constructors

IfaceMRefl |
IfaceMCo IfaceCoercion |

#### Instances

Instances details

NFData IfaceMCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceMCoercion -> () Source #
Binary IfaceMCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceMCoercion -> IO () Source # put :: WriteBinHandle -> IfaceMCoercion -> IO (Bin IfaceMCoercion) Source # get :: ReadBinHandle -> IO IfaceMCoercion Source #
Eq IfaceMCoercion Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceMCoercion -> IfaceMCoercion -> Bool Source # (/=) :: IfaceMCoercion -> IfaceMCoercion -> Bool Source #
Ord IfaceMCoercion Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceMCoercion -> IfaceMCoercion -> Ordering Source #

(<) :: IfaceMCoercion -> IfaceMCoercion -> Bool Source #

(<=) :: IfaceMCoercion -> IfaceMCoercion -> Bool Source #

(>) :: IfaceMCoercion -> IfaceMCoercion -> Bool Source #

(>=) :: IfaceMCoercion -> IfaceMCoercion -> Bool Source #

max :: IfaceMCoercion -> IfaceMCoercion -> IfaceMCoercion Source #

min :: IfaceMCoercion -> IfaceMCoercion -> IfaceMCoercion Source #

type IfaceMult = IfaceType Source #

data IfaceTyCon Source #

Constructors

IfaceTyCon |

Fields

- ifaceTyConName :: IfExtName
- ifaceTyConInfo :: !IfaceTyConInfo

  We add a bang to this field as heap analysis showed that this constructor retains a thunk to a value that is usually shared.

  See !12200 for how this bang saved ~10% residency when loading `mi_extra_decls` on the agda code base.

  See Note [Sharing IfaceTyConInfo] for why sharing is so important for `IfaceTyConInfo`.

#### Instances

Instances details

NFData IfaceTyCon Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceTyCon -> () Source #
Binary IfaceTyCon Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceTyCon -> IO () Source # put :: WriteBinHandle -> IfaceTyCon -> IO (Bin IfaceTyCon) Source # get :: ReadBinHandle -> IO IfaceTyCon Source #
Outputable IfaceTyCon Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceTyCon -> SDoc Source #
Eq IfaceTyCon Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceTyCon -> IfaceTyCon -> Bool Source # (/=) :: IfaceTyCon -> IfaceTyCon -> Bool Source #
Ord IfaceTyCon Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceTyCon -> IfaceTyCon -> Ordering Source #

(<) :: IfaceTyCon -> IfaceTyCon -> Bool Source #

(<=) :: IfaceTyCon -> IfaceTyCon -> Bool Source #

(>) :: IfaceTyCon -> IfaceTyCon -> Bool Source #

(>=) :: IfaceTyCon -> IfaceTyCon -> Bool Source #

max :: IfaceTyCon -> IfaceTyCon -> IfaceTyCon Source #

min :: IfaceTyCon -> IfaceTyCon -> IfaceTyCon Source #

data IfaceTyConInfo Source #

Constructors

IfaceTyConInfo |

Fields

- ifaceTyConIsPromoted :: PromotionFlag
- ifaceTyConSort :: IfaceTyConSort

#### Instances

Instances details

NFData IfaceTyConInfo Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceTyConInfo -> () Source #
Binary IfaceTyConInfo Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceTyConInfo -> IO () Source # put :: WriteBinHandle -> IfaceTyConInfo -> IO (Bin IfaceTyConInfo) Source # get :: ReadBinHandle -> IO IfaceTyConInfo Source #
Outputable IfaceTyConInfo Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceTyConInfo -> SDoc Source #
Eq IfaceTyConInfo Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceTyConInfo -> IfaceTyConInfo -> Bool Source # (/=) :: IfaceTyConInfo -> IfaceTyConInfo -> Bool Source #
Ord IfaceTyConInfo Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceTyConInfo -> IfaceTyConInfo -> Ordering Source #

(<) :: IfaceTyConInfo -> IfaceTyConInfo -> Bool Source #

(<=) :: IfaceTyConInfo -> IfaceTyConInfo -> Bool Source #

(>) :: IfaceTyConInfo -> IfaceTyConInfo -> Bool Source #

(>=) :: IfaceTyConInfo -> IfaceTyConInfo -> Bool Source #

max :: IfaceTyConInfo -> IfaceTyConInfo -> IfaceTyConInfo Source #

min :: IfaceTyConInfo -> IfaceTyConInfo -> IfaceTyConInfo Source #

mkIfaceTyConInfo :: PromotionFlag -> IfaceTyConSort -> IfaceTyConInfo Source #

This smart constructor allows sharing of the two most common cases. See Note [Sharing IfaceTyConInfo]

data IfaceTyConSort Source #

The various types of TyCons which have special, built-in syntax.

Constructors

IfaceNormalTyCon | a regular tycon
IfaceTupleTyCon !Arity !TupleSort | a tuple, e.g. `(a, b, c)` or `(#a, b, c#)`. The arity is the tuple width, not the tycon arity (which is twice the width in the case of unboxed tuples).
IfaceSumTyCon !Arity | an unboxed sum, e.g. `(# a | b | c #)`
IfaceEqualityTyCon | A heterogeneous equality TyCon (i.e. eqPrimTyCon, eqReprPrimTyCon, heqTyCon) that is actually being applied to two types of the same kind. This affects pretty-printing only: see Note [Equality predicates in IfaceType]

#### Instances

Instances details

NFData IfaceTyConSort Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceTyConSort -> () Source #
Binary IfaceTyConSort Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceTyConSort -> IO () Source # put :: WriteBinHandle -> IfaceTyConSort -> IO (Bin IfaceTyConSort) Source # get :: ReadBinHandle -> IO IfaceTyConSort Source #
Outputable IfaceTyConSort Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceTyConSort -> SDoc Source #
Eq IfaceTyConSort Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceTyConSort -> IfaceTyConSort -> Bool Source # (/=) :: IfaceTyConSort -> IfaceTyConSort -> Bool Source #
Ord IfaceTyConSort Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceTyConSort -> IfaceTyConSort -> Ordering Source #

(<) :: IfaceTyConSort -> IfaceTyConSort -> Bool Source #

(<=) :: IfaceTyConSort -> IfaceTyConSort -> Bool Source #

(>) :: IfaceTyConSort -> IfaceTyConSort -> Bool Source #

(>=) :: IfaceTyConSort -> IfaceTyConSort -> Bool Source #

max :: IfaceTyConSort -> IfaceTyConSort -> IfaceTyConSort Source #

min :: IfaceTyConSort -> IfaceTyConSort -> IfaceTyConSort Source #

data IfaceTyLit Source #

Constructors

IfaceNumTyLit Integer |
IfaceStrTyLit LexicalFastString |
IfaceCharTyLit Char |

#### Instances

Instances details

NFData IfaceTyLit Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceTyLit -> () Source #
Binary IfaceTyLit Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceTyLit -> IO () Source # put :: WriteBinHandle -> IfaceTyLit -> IO (Bin IfaceTyLit) Source # get :: ReadBinHandle -> IO IfaceTyLit Source #
Outputable IfaceTyLit Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceTyLit -> SDoc Source #
Eq IfaceTyLit Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceTyLit -> IfaceTyLit -> Bool Source # (/=) :: IfaceTyLit -> IfaceTyLit -> Bool Source #
Ord IfaceTyLit Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceTyLit -> IfaceTyLit -> Ordering Source #

(<) :: IfaceTyLit -> IfaceTyLit -> Bool Source #

(<=) :: IfaceTyLit -> IfaceTyLit -> Bool Source #

(>) :: IfaceTyLit -> IfaceTyLit -> Bool Source #

(>=) :: IfaceTyLit -> IfaceTyLit -> Bool Source #

max :: IfaceTyLit -> IfaceTyLit -> IfaceTyLit Source #

min :: IfaceTyLit -> IfaceTyLit -> IfaceTyLit Source #

data IfaceAppArgs Source #

Stores the arguments in a type application as a list. See `Note [Suppressing invisible arguments]`.

Constructors

IA_Nil |
IA_Arg IfaceType ForAllTyFlag IfaceAppArgs |

#### Instances

Instances details

NFData IfaceAppArgs Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceAppArgs -> () Source #
Monoid IfaceAppArgs Source # |
Instance details Defined in GHC.Iface.Type Methods mempty :: IfaceAppArgs Source # mappend :: IfaceAppArgs -> IfaceAppArgs -> IfaceAppArgs Source # mconcat :: [IfaceAppArgs] -> IfaceAppArgs Source #
Semigroup IfaceAppArgs Source # |
Instance details Defined in GHC.Iface.Type Methods (<>) :: IfaceAppArgs -> IfaceAppArgs -> IfaceAppArgs Source # sconcat :: NonEmpty IfaceAppArgs -> IfaceAppArgs Source # stimes :: Integral b => b -> IfaceAppArgs -> IfaceAppArgs Source #
Binary IfaceAppArgs Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceAppArgs -> IO () Source # put :: WriteBinHandle -> IfaceAppArgs -> IO (Bin IfaceAppArgs) Source # get :: ReadBinHandle -> IO IfaceAppArgs Source #
Outputable IfaceAppArgs Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceAppArgs -> SDoc Source #
Eq IfaceAppArgs Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceAppArgs -> IfaceAppArgs -> Bool Source # (/=) :: IfaceAppArgs -> IfaceAppArgs -> Bool Source #
Ord IfaceAppArgs Source # |

Instance details

Defined in GHC.Iface.Type

Methods

compare :: IfaceAppArgs -> IfaceAppArgs -> Ordering Source #

(<) :: IfaceAppArgs -> IfaceAppArgs -> Bool Source #

(<=) :: IfaceAppArgs -> IfaceAppArgs -> Bool Source #

(>) :: IfaceAppArgs -> IfaceAppArgs -> Bool Source #

(>=) :: IfaceAppArgs -> IfaceAppArgs -> Bool Source #

max :: IfaceAppArgs -> IfaceAppArgs -> IfaceAppArgs Source #

min :: IfaceAppArgs -> IfaceAppArgs -> IfaceAppArgs Source #

type IfaceContext = [IfacePredType] Source #

data IfaceBndr Source #

Constructors

IfaceIdBndr !IfaceIdBndr |
IfaceTvBndr !IfaceTvBndr |

#### Instances

Instances details

NFData IfaceBndr Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceBndr -> () Source #
Binary IfaceBndr Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceBndr -> IO () Source # put :: WriteBinHandle -> IfaceBndr -> IO (Bin IfaceBndr) Source # get :: ReadBinHandle -> IO IfaceBndr Source #
Outputable IfaceBndr Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceBndr -> SDoc Source #
Eq IfaceBndr Source # |
Instance details Defined in GHC.Iface.Type Methods (==) :: IfaceBndr -> IfaceBndr -> Bool Source # (/=) :: IfaceBndr -> IfaceBndr -> Bool Source #
Ord IfaceBndr Source # |
Instance details Defined in GHC.Iface.Type Methods compare :: IfaceBndr -> IfaceBndr -> Ordering Source # (<) :: IfaceBndr -> IfaceBndr -> Bool Source # (<=) :: IfaceBndr -> IfaceBndr -> Bool Source # (>) :: IfaceBndr -> IfaceBndr -> Bool Source # (>=) :: IfaceBndr -> IfaceBndr -> Bool Source # max :: IfaceBndr -> IfaceBndr -> IfaceBndr Source # min :: IfaceBndr -> IfaceBndr -> IfaceBndr Source #

data IfaceOneShot Source #

Constructors

IfaceNoOneShot |
IfaceOneShot |

#### Instances

Instances details

NFData IfaceOneShot Source # |
Instance details Defined in GHC.Iface.Type Methods rnf :: IfaceOneShot -> () Source #
Binary IfaceOneShot Source # |
Instance details Defined in GHC.Iface.Type Methods put_ :: WriteBinHandle -> IfaceOneShot -> IO () Source # put :: WriteBinHandle -> IfaceOneShot -> IO (Bin IfaceOneShot) Source # get :: ReadBinHandle -> IO IfaceOneShot Source #
Outputable IfaceOneShot Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: IfaceOneShot -> SDoc Source #

type IfaceLamBndr = (IfaceBndr, IfaceOneShot) Source #

type IfaceTvBndr = (IfLclName, IfaceKind) Source #

type IfaceIdBndr = (IfaceType, IfLclName, IfaceType) Source #

type IfaceTyConBinder = VarBndr IfaceBndr TyConBndrVis Source #

type IfaceForAllSpecBndr = VarBndr IfaceBndr Specificity Source #

type IfaceForAllBndr = VarBndr IfaceBndr ForAllTyFlag Source #

data ForAllTyFlag Source #

ForAllTyFlag

Is something required to appear in source Haskell (`Required`), permitted by request (`Specified`) (visible type application), or prohibited entirely from appearing in source Haskell (`Inferred`)? See Note [VarBndrs, ForAllTyBinders, TyConBinders, and visibility] in GHC.Core.TyCo.Rep

Constructors

Invisible !Specificity |
Required |

Bundled Patterns

pattern Specified :: ForAllTyFlag |
pattern Inferred :: ForAllTyFlag |

#### Instances

Instances details

NFData ForAllTyFlag Source # |
Instance details Defined in GHC.Hs.Specificity Methods rnf :: ForAllTyFlag -> () Source #
Data ForAllTyFlag Source # |

Instance details

Defined in Language.Haskell.Syntax.Specificity

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ForAllTyFlag -> c ForAllTyFlag Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c ForAllTyFlag Source #

toConstr :: ForAllTyFlag -> Constr Source #

dataTypeOf :: ForAllTyFlag -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c ForAllTyFlag) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c ForAllTyFlag) Source #

gmapT :: (forall b. Data b => b -> b) -> ForAllTyFlag -> ForAllTyFlag Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ForAllTyFlag -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ForAllTyFlag -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> ForAllTyFlag -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ForAllTyFlag -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ForAllTyFlag -> m ForAllTyFlag Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ForAllTyFlag -> m ForAllTyFlag Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ForAllTyFlag -> m ForAllTyFlag Source #

Binary ForAllTyFlag Source # |
Instance details Defined in GHC.Hs.Specificity Methods put_ :: WriteBinHandle -> ForAllTyFlag -> IO () Source # put :: WriteBinHandle -> ForAllTyFlag -> IO (Bin ForAllTyFlag) Source # get :: ReadBinHandle -> IO ForAllTyFlag Source #
Outputable ForAllTyFlag Source # |
Instance details Defined in GHC.Hs.Specificity Methods ppr :: ForAllTyFlag -> SDoc Source #
Eq ForAllTyFlag Source # |
Instance details Defined in Language.Haskell.Syntax.Specificity Methods (==) :: ForAllTyFlag -> ForAllTyFlag -> Bool Source # (/=) :: ForAllTyFlag -> ForAllTyFlag -> Bool Source #
Ord ForAllTyFlag Source # |

Instance details

Defined in Language.Haskell.Syntax.Specificity

Methods

compare :: ForAllTyFlag -> ForAllTyFlag -> Ordering Source #

(<) :: ForAllTyFlag -> ForAllTyFlag -> Bool Source #

(<=) :: ForAllTyFlag -> ForAllTyFlag -> Bool Source #

(>) :: ForAllTyFlag -> ForAllTyFlag -> Bool Source #

(>=) :: ForAllTyFlag -> ForAllTyFlag -> Bool Source #

max :: ForAllTyFlag -> ForAllTyFlag -> ForAllTyFlag Source #

min :: ForAllTyFlag -> ForAllTyFlag -> ForAllTyFlag Source #

Outputable tv => Outputable (VarBndr tv ForAllTyFlag) Source # |
Instance details Defined in GHC.Types.Var Methods ppr :: VarBndr tv ForAllTyFlag -> SDoc Source #

data FunTyFlag Source #

The non-dependent version of `ForAllTyFlag`. See Note [FunTyFlag] Appears here partly so that it's together with its friends ForAllTyFlag and ForallVisFlag, but also because it is used in IfaceType, rather early in the compilation chain

Constructors

FTF_T_T |
FTF_T_C |
FTF_C_T |
FTF_C_C |

#### Instances

Instances details

Data FunTyFlag Source # |

Instance details

Defined in GHC.Types.Var

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> FunTyFlag -> c FunTyFlag Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c FunTyFlag Source #

toConstr :: FunTyFlag -> Constr Source #

dataTypeOf :: FunTyFlag -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c FunTyFlag) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c FunTyFlag) Source #

gmapT :: (forall b. Data b => b -> b) -> FunTyFlag -> FunTyFlag Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> FunTyFlag -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> FunTyFlag -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> FunTyFlag -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> FunTyFlag -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> FunTyFlag -> m FunTyFlag Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> FunTyFlag -> m FunTyFlag Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> FunTyFlag -> m FunTyFlag Source #

Binary FunTyFlag Source # |
Instance details Defined in GHC.Types.Var Methods put_ :: WriteBinHandle -> FunTyFlag -> IO () Source # put :: WriteBinHandle -> FunTyFlag -> IO (Bin FunTyFlag) Source # get :: ReadBinHandle -> IO FunTyFlag Source #
Outputable FunTyFlag Source # |
Instance details Defined in GHC.Types.Var Methods ppr :: FunTyFlag -> SDoc Source #
Eq FunTyFlag Source # |
Instance details Defined in GHC.Types.Var Methods (==) :: FunTyFlag -> FunTyFlag -> Bool Source # (/=) :: FunTyFlag -> FunTyFlag -> Bool Source #
Ord FunTyFlag Source # |
Instance details Defined in GHC.Types.Var Methods compare :: FunTyFlag -> FunTyFlag -> Ordering Source # (<) :: FunTyFlag -> FunTyFlag -> Bool Source # (<=) :: FunTyFlag -> FunTyFlag -> Bool Source # (>) :: FunTyFlag -> FunTyFlag -> Bool Source # (>=) :: FunTyFlag -> FunTyFlag -> Bool Source # max :: FunTyFlag -> FunTyFlag -> FunTyFlag Source # min :: FunTyFlag -> FunTyFlag -> FunTyFlag Source #

data ShowForAllFlag Source #

Show forall flag

Unconditionally show the forall quantifier with (`ShowForAllMust`) or when (`ShowForAllWhen`) the names used are free in the binder or when compiling with -fprint-explicit-foralls.

Constructors

ShowForAllMust |
ShowForAllWhen |

data ShowSub Source #

Constructors

ShowSub |

Fields

- ss_how_much :: ShowHowMuch
- ss_forall :: ShowForAllFlag

data ShowHowMuch Source #

Constructors

ShowHeader AltPpr | Header information only, not rhs
ShowSome (Maybe (OccName -> Bool)) AltPpr | Show the declaration and its RHS. The `Maybe` predicate allows filtering of the sub-components which should be printing; any sub-components filtered out will be elided with `...`.
ShowIface | Everything including GHC-internal information (used in --show-iface)

#### Instances

Instances details

Outputable ShowHowMuch Source # |
Instance details Defined in GHC.Iface.Type Methods ppr :: ShowHowMuch -> SDoc Source #

newtype AltPpr Source #

Constructors

AltPpr (Maybe (OccName -> SDoc)) |

mkIfaceForAllTvBndr :: ForAllTyFlag -> IfaceTvBndr -> IfaceForAllBndr Source #

Make an `IfaceForAllBndr` from an `IfaceTvBndr`.

mkIfaceTyConKind :: [IfaceTyConBinder] -> IfaceKind -> IfaceKind Source #

Build the `tyConKind` from the binders and the result kind. Keep in sync with `mkTyConKind` in GHC.Core.TyCon.

ifaceForAllSpecToBndrs :: [IfaceForAllSpecBndr] -> [IfaceForAllBndr] Source #

ifaceForAllSpecToBndr :: IfaceForAllSpecBndr -> IfaceForAllBndr Source #

ifForAllBndrVar :: IfaceForAllBndr -> IfaceBndr Source #

Extract an `IfaceBndr` from an `IfaceForAllBndr`.

ifForAllBndrName :: IfaceForAllBndr -> IfLclName Source #

Extract the variable name from an `IfaceForAllBndr`.

ifaceBndrName :: IfaceBndr -> IfLclName Source #

ifTyConBinderVar :: IfaceTyConBinder -> IfaceBndr Source #

Extract an `IfaceBndr` from an `IfaceTyConBinder`.

ifTyConBinderName :: IfaceTyConBinder -> IfLclName Source #

Extract the variable name from an `IfaceTyConBinder`.

putIfaceType :: WriteBinHandle -> IfaceType -> IO () Source #

Serialises an `IfaceType` to the given `WriteBinHandle`.

Serialising inner `IfaceType'`s uses the `put` of `IfaceType` which may be using a deduplication table. See Note [Deduplication during iface binary serialisation].

getIfaceType :: HasCallStack => ReadBinHandle -> IO IfaceType Source #

Deserialises an `IfaceType` from the given `ReadBinHandle`.

Reading inner `IfaceType'`s uses the `get` of `IfaceType` which may be using a deduplication table. See Note [Deduplication during iface binary serialisation].

ifaceTypeSharedByte :: Word8 Source #

This is the byte tag we expect to read when the next value is not an `IfaceType` value, but an offset into a lookup table. See Note [Deduplication during iface binary serialisation].

Must not overlap with any byte tag in `getIfaceType`.

isIfaceLiftedTypeKind :: IfaceKind -> Bool Source #

Returns true for Type or (TYPE LiftedRep)

appArgsIfaceTypes :: IfaceAppArgs -> [IfaceType] Source #

appArgsIfaceTypesForAllTyFlags :: IfaceAppArgs -> [(IfaceType, ForAllTyFlag)] Source #

newtype SuppressBndrSig Source #

Do we want to suppress kind annotations on binders? See Note [Suppressing binder signatures]

Constructors

SuppressBndrSig Bool |

newtype UseBndrParens Source #

Constructors

UseBndrParens Bool |

newtype PrintExplicitKinds Source #

Constructors

PrintExplicitKinds Bool |

pprIfaceType :: IfaceType -> SDoc Source #

pprParendIfaceType :: IfaceType -> SDoc Source #

pprPrecIfaceType :: PprPrec -> IfaceType -> SDoc Source #

pprIfaceContext :: PprPrec -> [IfacePredType] -> SDoc Source #

Prints a context or `()` if empty You give it the context precedence

pprIfaceContextArr :: [IfacePredType] -> SDoc Source #

Prints "(C a, D b) =>", including the arrow. Used when we want to print a context in a type, so we use `funPrec` to decide whether to parenthesise a singleton predicate; e.g. Num a => a -> a

pprIfaceIdBndr :: IfaceIdBndr -> SDoc Source #

pprIfaceLamBndr :: IfaceLamBndr -> SDoc Source #

pprIfaceTvBndr :: IfaceTvBndr -> SuppressBndrSig -> UseBndrParens -> SDoc Source #

pprIfaceTyConBinders :: SuppressBndrSig -> [IfaceTyConBinder] -> SDoc Source #

pprIfaceBndrs :: [IfaceBndr] -> SDoc Source #

pprIfaceAppArgs :: IfaceAppArgs -> SDoc Source #

pprParendIfaceAppArgs :: IfaceAppArgs -> SDoc Source #

pprIfaceForAllPart :: [IfaceForAllBndr] -> [IfacePredType] -> SDoc -> SDoc Source #

pprIfaceForAllPartMust :: [IfaceForAllBndr] -> [IfacePredType] -> SDoc -> SDoc Source #

Like `pprIfaceForAllPart`, but always uses an explicit `forall`.

pprIfaceForAll :: [IfaceForAllBndr] -> SDoc Source #

Render the "forall ... ." or "forall ... ->" bit of a type.

pprIfaceSigmaType :: ShowForAllFlag -> IfaceType -> SDoc Source #

pprIfaceTyLit :: IfaceTyLit -> SDoc Source #

pprIfaceCoercion :: IfaceCoercion -> SDoc Source #

pprParendIfaceCoercion :: IfaceCoercion -> SDoc Source #

splitIfaceSigmaTy :: IfaceType -> ([IfaceForAllBndr], [IfacePredType], IfaceType) Source #

pprIfaceTypeApp :: PprPrec -> IfaceTyCon -> IfaceAppArgs -> SDoc Source #

pprUserIfaceForAll :: [IfaceForAllBndr] -> SDoc Source #

pprIfaceCoTcApp :: PprPrec -> IfaceTyCon -> [IfaceCoercion] -> SDoc Source #

pprTyTcApp :: PprPrec -> IfaceTyCon -> IfaceAppArgs -> SDoc Source #

pprIfacePrefixApp :: PprPrec -> SDoc -> [SDoc] -> SDoc Source #

isIfaceRhoType :: IfaceType -> Bool Source #

suppressIfaceInvisibles :: PrintExplicitKinds -> [IfaceTyConBinder] -> [a] -> [a] Source #

stripIfaceInvisVars :: PrintExplicitKinds -> [IfaceTyConBinder] -> [IfaceTyConBinder] Source #

stripInvisArgs :: PrintExplicitKinds -> IfaceAppArgs -> IfaceAppArgs Source #

mkIfaceTySubst :: [(IfLclName, IfaceType)] -> IfaceTySubst Source #

substIfaceTyVar :: IfaceTySubst -> IfLclName -> IfaceType Source #

substIfaceAppArgs :: IfaceTySubst -> IfaceAppArgs -> IfaceAppArgs Source #

inDomIfaceTySubst :: IfaceTySubst -> IfaceTvBndr -> Bool Source #

many_ty :: IfaceType Source #

The type 'Many :: Multiplicity'.

pprTypeArrow :: FunTyFlag -> IfaceMult -> SDoc Source #