ghc-9.10.3: The GHC API

Safe Haskell | None
Language | GHC2021

GHC.Iface.Ext.Types

Synopsis

- type Span = RealSrcSpan
- hieVersion :: Integer
- data HieFile = HieFile {
  - hie_hs_file :: FilePath
  - hie_module :: Module
  - hie_types :: Array TypeIndex HieTypeFlat
  - hie_asts :: HieASTs TypeIndex
  - hie_exports :: [AvailInfo]
  - hie_hs_src :: ByteString
  }
- type TypeIndex = Int
- data HieType a
  - = HTyVarTy Name
  - | HAppTy a (HieArgs a)
  - | HTyConApp IfaceTyCon (HieArgs a)
  - | HForAllTy ((Name, a), ForAllTyFlag) a
  - | HFunTy a a a
  - | HQualTy a a
  - | HLitTy IfaceTyLit
  - | HCastTy a
  - | HCoercionTy
- type HieTypeFlat = HieType TypeIndex
- newtype HieTypeFix = Roll (HieType HieTypeFix)
- newtype HieArgs a = HieArgs [(Bool, a)]
- type HiePath = LexicalFastString
- pattern HiePath :: FastString -> HiePath
- newtype HieASTs a = HieASTs {
  - getAsts :: Map HiePath (HieAST a)
  }
- data HieAST a = Node {
  - sourcedNodeInfo :: SourcedNodeInfo a
  - nodeSpan :: Span
  - nodeChildren :: [HieAST a]
  }
- newtype SourcedNodeInfo a = SourcedNodeInfo {
  - getSourcedNodeInfo :: Map NodeOrigin (NodeInfo a)
  }
- data NodeOrigin
  - = SourceInfo
  - | GeneratedInfo
- data NodeAnnotation = NodeAnnotation {
  - nodeAnnotConstr :: !FastString
  - nodeAnnotType :: !FastString
  }
- data NodeInfo a = NodeInfo {
  - nodeAnnotations :: Set NodeAnnotation
  - nodeType :: [a]
  - nodeIdentifiers :: NodeIdentifiers a
  }
- pprNodeIdents :: Outputable a => NodeIdentifiers a -> SDoc
- pprIdentifier :: Identifier -> SDoc
- type Identifier = Either ModuleName Name
- type NodeIdentifiers a = Map Identifier (IdentifierDetails a)
- data IdentifierDetails a = IdentifierDetails {
  - identType :: Maybe a
  - identInfo :: Set ContextInfo
  }
- data ContextInfo
  - = Use
  - | MatchBind
  - | IEThing IEType
  - | TyDecl
  - | ValBind BindType Scope (Maybe Span)
  - | PatternBind Scope Scope (Maybe Span)
  - | ClassTyDecl (Maybe Span)
  - | Decl DeclType (Maybe Span)
  - | TyVarBind Scope TyVarScope
  - | RecField RecFieldContext (Maybe Span)
  - | EvidenceVarBind EvVarSource Scope (Maybe Span)
  - | EvidenceVarUse
- pprBindSpan :: Maybe Span -> SDoc
- data EvVarSource
  - = EvPatternBind
  - | EvSigBind
  - | EvWrapperBind
  - | EvImplicitBind
  - | EvInstBind {
    - isSuperInst :: Bool
    - cls :: Name
    }
  - | EvLetBind EvBindDeps
- newtype EvBindDeps = EvBindDeps {
  - getEvBindDeps :: [Name]
  }
- data IEType
  - = Import
  - | ImportAs
  - | ImportHiding
  - | Export
- data RecFieldContext
  - = RecFieldDecl
  - | RecFieldAssign
  - | RecFieldMatch
  - | RecFieldOcc
- data BindType
  - = RegularBind
  - | InstanceBind
- data DeclType
  - = FamDec
  - | SynDec
  - | DataDec
  - | ConDec
  - | PatSynDec
  - | ClassDec
  - | InstDec
- data Scope
  - = NoScope
  - | LocalScope Span
  - | ModuleScope
- data TyVarScope
  - = ResolvedScopes [Scope]
  - | UnresolvedScope [Name] (Maybe Span)
- data HieName
  - = ExternalName !Module !OccName !SrcSpan
  - | LocalName !OccName !SrcSpan
  - | KnownKeyName !Unique
- hieNameOcc :: HieName -> OccName
- toHieName :: Name -> HieName

# Documentation

type Span = RealSrcSpan Source #

hieVersion :: Integer Source #

Current version of `.hie` files

data HieFile Source #

GHC builds up a wealth of information about Haskell source as it compiles it. `.hie` files are a way of persisting some of this information to disk so that external tools that need to work with haskell source don't need to parse, typecheck, and rename all over again. These files contain:

- a simplified AST

  - nodes are annotated with source positions and types
  - identifiers are annotated with scope information
- the raw bytes of the initial Haskell source

Besides saving compilation cycles, `.hie` files also offer a more stable interface than the GHC API.

Constructors

HieFile |

Fields

- hie_hs_file :: FilePath

  Initial Haskell source file path

- hie_module :: Module

  The module this HIE file is for

- hie_types :: Array TypeIndex HieTypeFlat

  Types referenced in the `hie_asts`.

  See Note [Efficient serialization of redundant type info]

- hie_asts :: HieASTs TypeIndex

  Type-annotated abstract syntax trees

- hie_exports :: [AvailInfo]

  The names that this module exports

- hie_hs_src :: ByteString

  Raw bytes of the initial Haskell source

#### Instances

Instances details

Binary HieFile Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> HieFile -> IO () Source # put :: BinHandle -> HieFile -> IO (Bin HieFile) Source # get :: BinHandle -> IO HieFile Source #

type TypeIndex = Int Source #

data HieType a Source #

A flattened version of `Type`.

See Note [Efficient serialization of redundant type info]

Constructors

HTyVarTy Name |
HAppTy a (HieArgs a) |
HTyConApp IfaceTyCon (HieArgs a) |
HForAllTy ((Name, a), ForAllTyFlag) a |
HFunTy a a a |
HQualTy a a | type with constraint: `t1 => t2` (see `IfaceDFunTy`)
HLitTy IfaceTyLit |
HCastTy a |
HCoercionTy |

#### Instances

Instances details

Functor HieType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieType a -> HieType b # (<$) :: a -> HieType b -> HieType a #
Foldable HieType Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => HieType m -> m #

foldMap :: Monoid m => (a -> m) -> HieType a -> m #

foldMap' :: Monoid m => (a -> m) -> HieType a -> m #

foldr :: (a -> b -> b) -> b -> HieType a -> b #

foldr' :: (a -> b -> b) -> b -> HieType a -> b #

foldl :: (b -> a -> b) -> b -> HieType a -> b #

foldl' :: (b -> a -> b) -> b -> HieType a -> b #

foldr1 :: (a -> a -> a) -> HieType a -> a #

foldl1 :: (a -> a -> a) -> HieType a -> a #

toList :: HieType a -> [a] #

null :: HieType a -> Bool #

length :: HieType a -> Int #

elem :: Eq a => a -> HieType a -> Bool #

maximum :: Ord a => HieType a -> a #

minimum :: Ord a => HieType a -> a #

sum :: Num a => HieType a -> a #

product :: Num a => HieType a -> a #

Traversable HieType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieType a -> f (HieType b) # sequenceA :: Applicative f => HieType (f a) -> f (HieType a) # mapM :: Monad m => (a -> m b) -> HieType a -> m (HieType b) # sequence :: Monad m => HieType (m a) -> m (HieType a) #
Binary (HieType TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> HieType TypeIndex -> IO () Source # put :: BinHandle -> HieType TypeIndex -> IO (Bin (HieType TypeIndex)) Source # get :: BinHandle -> IO (HieType TypeIndex) Source #
Eq a => Eq (HieType a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: HieType a -> HieType a -> Bool # (/=) :: HieType a -> HieType a -> Bool #

type HieTypeFlat = HieType TypeIndex Source #

newtype HieTypeFix Source #

Roughly isomorphic to the original core `Type`.

Constructors

Roll (HieType HieTypeFix) |

#### Instances

Instances details

Eq HieTypeFix Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: HieTypeFix -> HieTypeFix -> Bool # (/=) :: HieTypeFix -> HieTypeFix -> Bool #

newtype HieArgs a Source #

A list of type arguments along with their respective visibilities (ie. is this an argument that would return `True` for `isVisibleForAllTyFlag`?).

Constructors

HieArgs [(Bool, a)] |

#### Instances

Instances details

Functor HieArgs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieArgs a -> HieArgs b # (<$) :: a -> HieArgs b -> HieArgs a #
Foldable HieArgs Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => HieArgs m -> m #

foldMap :: Monoid m => (a -> m) -> HieArgs a -> m #

foldMap' :: Monoid m => (a -> m) -> HieArgs a -> m #

foldr :: (a -> b -> b) -> b -> HieArgs a -> b #

foldr' :: (a -> b -> b) -> b -> HieArgs a -> b #

foldl :: (b -> a -> b) -> b -> HieArgs a -> b #

foldl' :: (b -> a -> b) -> b -> HieArgs a -> b #

foldr1 :: (a -> a -> a) -> HieArgs a -> a #

foldl1 :: (a -> a -> a) -> HieArgs a -> a #

toList :: HieArgs a -> [a] #

null :: HieArgs a -> Bool #

length :: HieArgs a -> Int #

elem :: Eq a => a -> HieArgs a -> Bool #

maximum :: Ord a => HieArgs a -> a #

minimum :: Ord a => HieArgs a -> a #

sum :: Num a => HieArgs a -> a #

product :: Num a => HieArgs a -> a #

Traversable HieArgs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieArgs a -> f (HieArgs b) # sequenceA :: Applicative f => HieArgs (f a) -> f (HieArgs a) # mapM :: Monad m => (a -> m b) -> HieArgs a -> m (HieArgs b) # sequence :: Monad m => HieArgs (m a) -> m (HieArgs a) #
Binary (HieArgs TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> HieArgs TypeIndex -> IO () Source # put :: BinHandle -> HieArgs TypeIndex -> IO (Bin (HieArgs TypeIndex)) Source # get :: BinHandle -> IO (HieArgs TypeIndex) Source #
Eq a => Eq (HieArgs a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: HieArgs a -> HieArgs a -> Bool # (/=) :: HieArgs a -> HieArgs a -> Bool #

type HiePath = LexicalFastString Source #

pattern HiePath :: FastString -> HiePath Source #

newtype HieASTs a Source #

Mapping from filepaths to the corresponding AST

Constructors

HieASTs |

Fields

- getAsts :: Map HiePath (HieAST a)

#### Instances

Instances details

Functor HieASTs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieASTs a -> HieASTs b # (<$) :: a -> HieASTs b -> HieASTs a #
Foldable HieASTs Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => HieASTs m -> m #

foldMap :: Monoid m => (a -> m) -> HieASTs a -> m #

foldMap' :: Monoid m => (a -> m) -> HieASTs a -> m #

foldr :: (a -> b -> b) -> b -> HieASTs a -> b #

foldr' :: (a -> b -> b) -> b -> HieASTs a -> b #

foldl :: (b -> a -> b) -> b -> HieASTs a -> b #

foldl' :: (b -> a -> b) -> b -> HieASTs a -> b #

foldr1 :: (a -> a -> a) -> HieASTs a -> a #

foldl1 :: (a -> a -> a) -> HieASTs a -> a #

toList :: HieASTs a -> [a] #

null :: HieASTs a -> Bool #

length :: HieASTs a -> Int #

elem :: Eq a => a -> HieASTs a -> Bool #

maximum :: Ord a => HieASTs a -> a #

minimum :: Ord a => HieASTs a -> a #

sum :: Num a => HieASTs a -> a #

product :: Num a => HieASTs a -> a #

Traversable HieASTs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieASTs a -> f (HieASTs b) # sequenceA :: Applicative f => HieASTs (f a) -> f (HieASTs a) # mapM :: Monad m => (a -> m b) -> HieASTs a -> m (HieASTs b) # sequence :: Monad m => HieASTs (m a) -> m (HieASTs a) #
Binary (HieASTs TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> HieASTs TypeIndex -> IO () Source # put :: BinHandle -> HieASTs TypeIndex -> IO (Bin (HieASTs TypeIndex)) Source # get :: BinHandle -> IO (HieASTs TypeIndex) Source #
Outputable a => Outputable (HieASTs a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: HieASTs a -> SDoc Source #

data HieAST a Source #

Constructors

Node |

Fields

- sourcedNodeInfo :: SourcedNodeInfo a
- nodeSpan :: Span
- nodeChildren :: [HieAST a]

#### Instances

Instances details

Functor HieAST Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieAST a -> HieAST b # (<$) :: a -> HieAST b -> HieAST a #
Foldable HieAST Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => HieAST m -> m #

foldMap :: Monoid m => (a -> m) -> HieAST a -> m #

foldMap' :: Monoid m => (a -> m) -> HieAST a -> m #

foldr :: (a -> b -> b) -> b -> HieAST a -> b #

foldr' :: (a -> b -> b) -> b -> HieAST a -> b #

foldl :: (b -> a -> b) -> b -> HieAST a -> b #

foldl' :: (b -> a -> b) -> b -> HieAST a -> b #

foldr1 :: (a -> a -> a) -> HieAST a -> a #

foldl1 :: (a -> a -> a) -> HieAST a -> a #

toList :: HieAST a -> [a] #

null :: HieAST a -> Bool #

length :: HieAST a -> Int #

elem :: Eq a => a -> HieAST a -> Bool #

maximum :: Ord a => HieAST a -> a #

minimum :: Ord a => HieAST a -> a #

sum :: Num a => HieAST a -> a #

product :: Num a => HieAST a -> a #

Traversable HieAST Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieAST a -> f (HieAST b) # sequenceA :: Applicative f => HieAST (f a) -> f (HieAST a) # mapM :: Monad m => (a -> m b) -> HieAST a -> m (HieAST b) # sequence :: Monad m => HieAST (m a) -> m (HieAST a) #
Binary (HieAST TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> HieAST TypeIndex -> IO () Source # put :: BinHandle -> HieAST TypeIndex -> IO (Bin (HieAST TypeIndex)) Source # get :: BinHandle -> IO (HieAST TypeIndex) Source #
Outputable a => Outputable (HieAST a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: HieAST a -> SDoc Source #

newtype SourcedNodeInfo a Source #

NodeInfos grouped by source

Constructors

SourcedNodeInfo |

Fields

- getSourcedNodeInfo :: Map NodeOrigin (NodeInfo a)

#### Instances

Instances details

Functor SourcedNodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> SourcedNodeInfo a -> SourcedNodeInfo b # (<$) :: a -> SourcedNodeInfo b -> SourcedNodeInfo a #
Foldable SourcedNodeInfo Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => SourcedNodeInfo m -> m #

foldMap :: Monoid m => (a -> m) -> SourcedNodeInfo a -> m #

foldMap' :: Monoid m => (a -> m) -> SourcedNodeInfo a -> m #

foldr :: (a -> b -> b) -> b -> SourcedNodeInfo a -> b #

foldr' :: (a -> b -> b) -> b -> SourcedNodeInfo a -> b #

foldl :: (b -> a -> b) -> b -> SourcedNodeInfo a -> b #

foldl' :: (b -> a -> b) -> b -> SourcedNodeInfo a -> b #

foldr1 :: (a -> a -> a) -> SourcedNodeInfo a -> a #

foldl1 :: (a -> a -> a) -> SourcedNodeInfo a -> a #

toList :: SourcedNodeInfo a -> [a] #

null :: SourcedNodeInfo a -> Bool #

length :: SourcedNodeInfo a -> Int #

elem :: Eq a => a -> SourcedNodeInfo a -> Bool #

maximum :: Ord a => SourcedNodeInfo a -> a #

minimum :: Ord a => SourcedNodeInfo a -> a #

sum :: Num a => SourcedNodeInfo a -> a #

product :: Num a => SourcedNodeInfo a -> a #

Traversable SourcedNodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> SourcedNodeInfo a -> f (SourcedNodeInfo b) # sequenceA :: Applicative f => SourcedNodeInfo (f a) -> f (SourcedNodeInfo a) # mapM :: Monad m => (a -> m b) -> SourcedNodeInfo a -> m (SourcedNodeInfo b) # sequence :: Monad m => SourcedNodeInfo (m a) -> m (SourcedNodeInfo a) #
Binary (SourcedNodeInfo TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> SourcedNodeInfo TypeIndex -> IO () Source # put :: BinHandle -> SourcedNodeInfo TypeIndex -> IO (Bin (SourcedNodeInfo TypeIndex)) Source # get :: BinHandle -> IO (SourcedNodeInfo TypeIndex) Source #
Outputable a => Outputable (SourcedNodeInfo a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: SourcedNodeInfo a -> SDoc Source #

data NodeOrigin Source #

Source of node info

Constructors

SourceInfo |
GeneratedInfo |

#### Instances

Instances details

Binary NodeOrigin Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> NodeOrigin -> IO () Source # put :: BinHandle -> NodeOrigin -> IO (Bin NodeOrigin) Source # get :: BinHandle -> IO NodeOrigin Source #
Outputable NodeOrigin Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: NodeOrigin -> SDoc Source #
Enum NodeOrigin Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

succ :: NodeOrigin -> NodeOrigin #

pred :: NodeOrigin -> NodeOrigin #

toEnum :: Int -> NodeOrigin #

fromEnum :: NodeOrigin -> Int #

enumFrom :: NodeOrigin -> [NodeOrigin] #

enumFromThen :: NodeOrigin -> NodeOrigin -> [NodeOrigin] #

enumFromTo :: NodeOrigin -> NodeOrigin -> [NodeOrigin] #

enumFromThenTo :: NodeOrigin -> NodeOrigin -> NodeOrigin -> [NodeOrigin] #

Eq NodeOrigin Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: NodeOrigin -> NodeOrigin -> Bool # (/=) :: NodeOrigin -> NodeOrigin -> Bool #
Ord NodeOrigin Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods compare :: NodeOrigin -> NodeOrigin -> Ordering # (<) :: NodeOrigin -> NodeOrigin -> Bool # (<=) :: NodeOrigin -> NodeOrigin -> Bool # (>) :: NodeOrigin -> NodeOrigin -> Bool # (>=) :: NodeOrigin -> NodeOrigin -> Bool # max :: NodeOrigin -> NodeOrigin -> NodeOrigin # min :: NodeOrigin -> NodeOrigin -> NodeOrigin #

data NodeAnnotation Source #

A node annotation

Constructors

NodeAnnotation |

Fields

- nodeAnnotConstr :: !FastString

  name of the AST node constructor

- nodeAnnotType :: !FastString

  name of the AST node Type

#### Instances

Instances details

Binary NodeAnnotation Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> NodeAnnotation -> IO () Source # put :: BinHandle -> NodeAnnotation -> IO (Bin NodeAnnotation) Source # get :: BinHandle -> IO NodeAnnotation Source #
Outputable NodeAnnotation Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: NodeAnnotation -> SDoc Source #
Eq NodeAnnotation Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: NodeAnnotation -> NodeAnnotation -> Bool # (/=) :: NodeAnnotation -> NodeAnnotation -> Bool #
Ord NodeAnnotation Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

compare :: NodeAnnotation -> NodeAnnotation -> Ordering #

(<) :: NodeAnnotation -> NodeAnnotation -> Bool #

(<=) :: NodeAnnotation -> NodeAnnotation -> Bool #

(>) :: NodeAnnotation -> NodeAnnotation -> Bool #

(>=) :: NodeAnnotation -> NodeAnnotation -> Bool #

max :: NodeAnnotation -> NodeAnnotation -> NodeAnnotation #

min :: NodeAnnotation -> NodeAnnotation -> NodeAnnotation #

data NodeInfo a Source #

The information stored in one AST node.

The type parameter exists to provide flexibility in representation of types (see Note [Efficient serialization of redundant type info]).

Constructors

NodeInfo |

Fields

- nodeAnnotations :: Set NodeAnnotation

  Annotations

- nodeType :: [a]

  The Haskell types of this node, if any.

- nodeIdentifiers :: NodeIdentifiers a

  All the identifiers and their details

#### Instances

Instances details

Functor NodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> NodeInfo a -> NodeInfo b # (<$) :: a -> NodeInfo b -> NodeInfo a #
Foldable NodeInfo Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => NodeInfo m -> m #

foldMap :: Monoid m => (a -> m) -> NodeInfo a -> m #

foldMap' :: Monoid m => (a -> m) -> NodeInfo a -> m #

foldr :: (a -> b -> b) -> b -> NodeInfo a -> b #

foldr' :: (a -> b -> b) -> b -> NodeInfo a -> b #

foldl :: (b -> a -> b) -> b -> NodeInfo a -> b #

foldl' :: (b -> a -> b) -> b -> NodeInfo a -> b #

foldr1 :: (a -> a -> a) -> NodeInfo a -> a #

foldl1 :: (a -> a -> a) -> NodeInfo a -> a #

toList :: NodeInfo a -> [a] #

null :: NodeInfo a -> Bool #

length :: NodeInfo a -> Int #

elem :: Eq a => a -> NodeInfo a -> Bool #

maximum :: Ord a => NodeInfo a -> a #

minimum :: Ord a => NodeInfo a -> a #

sum :: Num a => NodeInfo a -> a #

product :: Num a => NodeInfo a -> a #

Traversable NodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> NodeInfo a -> f (NodeInfo b) # sequenceA :: Applicative f => NodeInfo (f a) -> f (NodeInfo a) # mapM :: Monad m => (a -> m b) -> NodeInfo a -> m (NodeInfo b) # sequence :: Monad m => NodeInfo (m a) -> m (NodeInfo a) #
Binary (NodeInfo TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> NodeInfo TypeIndex -> IO () Source # put :: BinHandle -> NodeInfo TypeIndex -> IO (Bin (NodeInfo TypeIndex)) Source # get :: BinHandle -> IO (NodeInfo TypeIndex) Source #
Outputable a => Outputable (NodeInfo a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: NodeInfo a -> SDoc Source #

pprNodeIdents :: Outputable a => NodeIdentifiers a -> SDoc Source #

pprIdentifier :: Identifier -> SDoc Source #

type Identifier = Either ModuleName Name Source #

type NodeIdentifiers a = Map Identifier (IdentifierDetails a) Source #

data IdentifierDetails a Source #

Information associated with every identifier

We need to include types with identifiers because sometimes multiple identifiers occur in the same span(Overloaded Record Fields and so on)

Constructors

IdentifierDetails |

Fields

- identType :: Maybe a
- identInfo :: Set ContextInfo

#### Instances

Instances details

Functor IdentifierDetails Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> IdentifierDetails a -> IdentifierDetails b # (<$) :: a -> IdentifierDetails b -> IdentifierDetails a #
Foldable IdentifierDetails Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

fold :: Monoid m => IdentifierDetails m -> m #

foldMap :: Monoid m => (a -> m) -> IdentifierDetails a -> m #

foldMap' :: Monoid m => (a -> m) -> IdentifierDetails a -> m #

foldr :: (a -> b -> b) -> b -> IdentifierDetails a -> b #

foldr' :: (a -> b -> b) -> b -> IdentifierDetails a -> b #

foldl :: (b -> a -> b) -> b -> IdentifierDetails a -> b #

foldl' :: (b -> a -> b) -> b -> IdentifierDetails a -> b #

foldr1 :: (a -> a -> a) -> IdentifierDetails a -> a #

foldl1 :: (a -> a -> a) -> IdentifierDetails a -> a #

toList :: IdentifierDetails a -> [a] #

null :: IdentifierDetails a -> Bool #

length :: IdentifierDetails a -> Int #

elem :: Eq a => a -> IdentifierDetails a -> Bool #

maximum :: Ord a => IdentifierDetails a -> a #

minimum :: Ord a => IdentifierDetails a -> a #

sum :: Num a => IdentifierDetails a -> a #

product :: Num a => IdentifierDetails a -> a #

Traversable IdentifierDetails Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> IdentifierDetails a -> f (IdentifierDetails b) # sequenceA :: Applicative f => IdentifierDetails (f a) -> f (IdentifierDetails a) # mapM :: Monad m => (a -> m b) -> IdentifierDetails a -> m (IdentifierDetails b) # sequence :: Monad m => IdentifierDetails (m a) -> m (IdentifierDetails a) #
Binary (IdentifierDetails TypeIndex) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> IdentifierDetails TypeIndex -> IO () Source # put :: BinHandle -> IdentifierDetails TypeIndex -> IO (Bin (IdentifierDetails TypeIndex)) Source # get :: BinHandle -> IO (IdentifierDetails TypeIndex) Source #
Outputable a => Outputable (IdentifierDetails a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: IdentifierDetails a -> SDoc Source #
Monoid (IdentifierDetails a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods mempty :: IdentifierDetails a # mappend :: IdentifierDetails a -> IdentifierDetails a -> IdentifierDetails a # mconcat :: [IdentifierDetails a] -> IdentifierDetails a #
Semigroup (IdentifierDetails a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (<>) :: IdentifierDetails a -> IdentifierDetails a -> IdentifierDetails a # sconcat :: NonEmpty (IdentifierDetails a) -> IdentifierDetails a # stimes :: Integral b => b -> IdentifierDetails a -> IdentifierDetails a #
Eq a => Eq (IdentifierDetails a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: IdentifierDetails a -> IdentifierDetails a -> Bool # (/=) :: IdentifierDetails a -> IdentifierDetails a -> Bool #

data ContextInfo Source #

Different contexts under which identifiers exist

Constructors

Use | regular variable
MatchBind |
IEThing IEType | import/export
TyDecl |
ValBind | Value binding

Fields

- BindType

  whether or not the binding is in an instance

- Scope

  scope over which the value is bound

- (Maybe Span)

  span of entire binding

PatternBind

Pattern binding

This case is tricky because the bound identifier can be used in two distinct scopes. Consider the following example (with `-XViewPatterns`)

    do (b, a, (a -> True)) <- bar
       foo a

The identifier `a` has two scopes: in the view pattern `(a -> True)` and in the rest of the `do`-block in `foo a`.

Fields

- Scope

  scope in the pattern (the variable bound can be used further in the pattern)

- Scope

  rest of the scope outside the pattern

- (Maybe Span)

  span of entire binding

ClassTyDecl (Maybe Span) |
Decl | Declaration

Fields

- DeclType

  type of declaration

- (Maybe Span)

  span of entire binding

TyVarBind Scope TyVarScope | Type variable
RecField RecFieldContext (Maybe Span) | Record field
EvidenceVarBind | Constraint/Dictionary evidence variable binding

Fields

- EvVarSource

  how did this bind come into being

- Scope

  scope over which the value is bound

- (Maybe Span)

  span of the binding site

EvidenceVarUse | Usage of evidence variable

#### Instances

Instances details

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

pprBindSpan :: Maybe Span -> SDoc Source #

data EvVarSource Source #

Constructors

EvPatternBind | bound by a pattern match
EvSigBind | bound by a type signature
EvWrapperBind | bound by a hswrapper
EvImplicitBind | bound by an implicit variable
EvInstBind | Bound by some instance of given class

Fields

- isSuperInst :: Bool
- cls :: Name

EvLetBind EvBindDeps | A direct let binding

#### Instances

Instances details

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

newtype EvBindDeps Source #

Eq/Ord instances compare on the converted HieName, as non-exported names may have different uniques after a roundtrip

Constructors

EvBindDeps |

Fields

- getEvBindDeps :: [Name]

#### Instances

Instances details

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

data IEType Source #

Types of imports and exports

Constructors

Import |
ImportAs |
ImportHiding |
Export |

#### Instances

Instances details

Binary IEType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> IEType -> IO () Source # put :: BinHandle -> IEType -> IO (Bin IEType) Source # get :: BinHandle -> IO IEType Source #
Outputable IEType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: IEType -> SDoc Source #
Enum IEType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: IEType -> IEType # pred :: IEType -> IEType # toEnum :: Int -> IEType # fromEnum :: IEType -> Int # enumFrom :: IEType -> [IEType] # enumFromThen :: IEType -> IEType -> [IEType] # enumFromTo :: IEType -> IEType -> [IEType] # enumFromThenTo :: IEType -> IEType -> IEType -> [IEType] #
Eq IEType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: IEType -> IEType -> Bool # (/=) :: IEType -> IEType -> Bool #
Ord IEType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods compare :: IEType -> IEType -> Ordering # (<) :: IEType -> IEType -> Bool # (<=) :: IEType -> IEType -> Bool # (>) :: IEType -> IEType -> Bool # (>=) :: IEType -> IEType -> Bool # max :: IEType -> IEType -> IEType # min :: IEType -> IEType -> IEType #

data RecFieldContext Source #

Constructors

RecFieldDecl |
RecFieldAssign |
RecFieldMatch |
RecFieldOcc |

#### Instances

Instances details

Binary RecFieldContext Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> RecFieldContext -> IO () Source # put :: BinHandle -> RecFieldContext -> IO (Bin RecFieldContext) Source # get :: BinHandle -> IO RecFieldContext Source #
Outputable RecFieldContext Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: RecFieldContext -> SDoc Source #
Enum RecFieldContext Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

succ :: RecFieldContext -> RecFieldContext #

pred :: RecFieldContext -> RecFieldContext #

toEnum :: Int -> RecFieldContext #

fromEnum :: RecFieldContext -> Int #

enumFrom :: RecFieldContext -> [RecFieldContext] #

enumFromThen :: RecFieldContext -> RecFieldContext -> [RecFieldContext] #

enumFromTo :: RecFieldContext -> RecFieldContext -> [RecFieldContext] #

enumFromThenTo :: RecFieldContext -> RecFieldContext -> RecFieldContext -> [RecFieldContext] #

Eq RecFieldContext Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: RecFieldContext -> RecFieldContext -> Bool # (/=) :: RecFieldContext -> RecFieldContext -> Bool #
Ord RecFieldContext Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

compare :: RecFieldContext -> RecFieldContext -> Ordering #

(<) :: RecFieldContext -> RecFieldContext -> Bool #

(<=) :: RecFieldContext -> RecFieldContext -> Bool #

(>) :: RecFieldContext -> RecFieldContext -> Bool #

(>=) :: RecFieldContext -> RecFieldContext -> Bool #

max :: RecFieldContext -> RecFieldContext -> RecFieldContext #

min :: RecFieldContext -> RecFieldContext -> RecFieldContext #

data BindType Source #

Constructors

RegularBind |
InstanceBind |

#### Instances

Instances details

Binary BindType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> BindType -> IO () Source # put :: BinHandle -> BindType -> IO (Bin BindType) Source # get :: BinHandle -> IO BindType Source #
Outputable BindType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: BindType -> SDoc Source #
Enum BindType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: BindType -> BindType # pred :: BindType -> BindType # toEnum :: Int -> BindType # fromEnum :: BindType -> Int # enumFrom :: BindType -> [BindType] # enumFromThen :: BindType -> BindType -> [BindType] # enumFromTo :: BindType -> BindType -> [BindType] # enumFromThenTo :: BindType -> BindType -> BindType -> [BindType] #
Eq BindType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: BindType -> BindType -> Bool # (/=) :: BindType -> BindType -> Bool #
Ord BindType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods compare :: BindType -> BindType -> Ordering # (<) :: BindType -> BindType -> Bool # (<=) :: BindType -> BindType -> Bool # (>) :: BindType -> BindType -> Bool # (>=) :: BindType -> BindType -> Bool # max :: BindType -> BindType -> BindType # min :: BindType -> BindType -> BindType #

data DeclType Source #

Constructors

FamDec | type or data family
SynDec | type synonym
DataDec | data declaration
ConDec | constructor declaration
PatSynDec | pattern synonym
ClassDec | class declaration
InstDec | instance declaration

#### Instances

Instances details

Binary DeclType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> DeclType -> IO () Source # put :: BinHandle -> DeclType -> IO (Bin DeclType) Source # get :: BinHandle -> IO DeclType Source #
Outputable DeclType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: DeclType -> SDoc Source #
Enum DeclType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: DeclType -> DeclType # pred :: DeclType -> DeclType # toEnum :: Int -> DeclType # fromEnum :: DeclType -> Int # enumFrom :: DeclType -> [DeclType] # enumFromThen :: DeclType -> DeclType -> [DeclType] # enumFromTo :: DeclType -> DeclType -> [DeclType] # enumFromThenTo :: DeclType -> DeclType -> DeclType -> [DeclType] #
Eq DeclType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: DeclType -> DeclType -> Bool # (/=) :: DeclType -> DeclType -> Bool #
Ord DeclType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods compare :: DeclType -> DeclType -> Ordering # (<) :: DeclType -> DeclType -> Bool # (<=) :: DeclType -> DeclType -> Bool # (>) :: DeclType -> DeclType -> Bool # (>=) :: DeclType -> DeclType -> Bool # max :: DeclType -> DeclType -> DeclType # min :: DeclType -> DeclType -> DeclType #

data Scope Source #

Constructors

NoScope |
LocalScope Span |
ModuleScope |

#### Instances

Instances details

Binary Scope Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods put_ :: BinHandle -> Scope -> IO () Source # put :: BinHandle -> Scope -> IO (Bin Scope) Source # get :: BinHandle -> IO Scope Source #
Outputable Scope Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: Scope -> SDoc Source #
Data Scope Source # |

Instance details

Defined in GHC.Iface.Ext.Types

Methods

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

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

toConstr :: Scope -> Constr #

dataTypeOf :: Scope -> DataType #

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

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

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

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

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

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

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

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

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

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

Eq Scope Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: Scope -> Scope -> Bool # (/=) :: Scope -> Scope -> Bool #
Ord Scope Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods compare :: Scope -> Scope -> Ordering # (<) :: Scope -> Scope -> Bool # (<=) :: Scope -> Scope -> Bool # (>) :: Scope -> Scope -> Bool # (>=) :: Scope -> Scope -> Bool # max :: Scope -> Scope -> Scope # min :: Scope -> Scope -> Scope #

data TyVarScope Source #

Scope of a type variable.

This warrants a data type apart from `Scope` because of complexities introduced by features like `-XScopedTypeVariables` and `-XInstanceSigs`. For example, consider:

    foo, bar, baz :: forall a. a -> a

Here `a` is in scope in all the definitions of `foo`, `bar`, and `baz`, so we need a list of scopes to keep track of this. Furthermore, this list cannot be computed until we resolve the binding sites of `foo`, `bar`, and `baz`.

Consequently, `a` starts with an ``UnresolvedScope` [foo, bar, baz] Nothing` which later gets resolved into a `ResolvedScopes`.

Constructors

ResolvedScopes [Scope] |
UnresolvedScope | Unresolved scopes should never show up in the final `.hie` file

Fields

- [Name]

  names of the definitions over which the scope spans

- (Maybe Span)

  the location of the instance/class declaration for the case where the type variable is declared in a method type signature

#### Instances

Instances details

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

data HieName Source #

`Name`'s get converted into `HieName`'s before being written into `.hie` files. See `toHieName` and `fromHieName` for logic on how to convert between these two types.

Constructors

ExternalName !Module !OccName !SrcSpan |
LocalName !OccName !SrcSpan |
KnownKeyName !Unique |

#### Instances

Instances details

Outputable HieName Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods ppr :: HieName -> SDoc Source #
Eq HieName Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (==) :: HieName -> HieName -> Bool # (/=) :: HieName -> HieName -> Bool #
Ord HieName Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods compare :: HieName -> HieName -> Ordering # (<) :: HieName -> HieName -> Bool # (<=) :: HieName -> HieName -> Bool # (>) :: HieName -> HieName -> Bool # (>=) :: HieName -> HieName -> Bool # max :: HieName -> HieName -> HieName # min :: HieName -> HieName -> HieName #

hieNameOcc :: HieName -> OccName Source #

toHieName :: Name -> HieName Source #