GHC.Iface.Ext.Types

ghc-9.2.6: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

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), ArgFlag) 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), ArgFlag) a |
HFunTy a a a |
HQualTy a a | type with constraint: `t1 => t2` (see `IfaceDFunTy`)
HLitTy IfaceTyLit |
HCastTy a |
HCoercionTy |

#### Instances

Instances details

Foldable HieType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => HieType m -> m Source # foldMap :: Monoid m => (a -> m) -> HieType a -> m Source # foldMap' :: Monoid m => (a -> m) -> HieType a -> m Source # foldr :: (a -> b -> b) -> b -> HieType a -> b Source # foldr' :: (a -> b -> b) -> b -> HieType a -> b Source # foldl :: (b -> a -> b) -> b -> HieType a -> b Source # foldl' :: (b -> a -> b) -> b -> HieType a -> b Source # foldr1 :: (a -> a -> a) -> HieType a -> a Source # foldl1 :: (a -> a -> a) -> HieType a -> a Source # toList :: HieType a -> [a] Source # null :: HieType a -> Bool Source # length :: HieType a -> Int Source # elem :: Eq a => a -> HieType a -> Bool Source # maximum :: Ord a => HieType a -> a Source # minimum :: Ord a => HieType a -> a Source # sum :: Num a => HieType a -> a Source # product :: Num a => HieType a -> a Source #
Traversable HieType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieType a -> f (HieType b) Source # sequenceA :: Applicative f => HieType (f a) -> f (HieType a) Source # mapM :: Monad m => (a -> m b) -> HieType a -> m (HieType b) Source # sequence :: Monad m => HieType (m a) -> m (HieType a) Source #
Functor HieType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieType a -> HieType b Source # (<$) :: a -> HieType b -> HieType a Source #
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) |

newtype HieArgs a Source #

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

Constructors

HieArgs [(Bool, a)] |

#### Instances

Instances details

Foldable HieArgs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => HieArgs m -> m Source # foldMap :: Monoid m => (a -> m) -> HieArgs a -> m Source # foldMap' :: Monoid m => (a -> m) -> HieArgs a -> m Source # foldr :: (a -> b -> b) -> b -> HieArgs a -> b Source # foldr' :: (a -> b -> b) -> b -> HieArgs a -> b Source # foldl :: (b -> a -> b) -> b -> HieArgs a -> b Source # foldl' :: (b -> a -> b) -> b -> HieArgs a -> b Source # foldr1 :: (a -> a -> a) -> HieArgs a -> a Source # foldl1 :: (a -> a -> a) -> HieArgs a -> a Source # toList :: HieArgs a -> [a] Source # null :: HieArgs a -> Bool Source # length :: HieArgs a -> Int Source # elem :: Eq a => a -> HieArgs a -> Bool Source # maximum :: Ord a => HieArgs a -> a Source # minimum :: Ord a => HieArgs a -> a Source # sum :: Num a => HieArgs a -> a Source # product :: Num a => HieArgs a -> a Source #
Traversable HieArgs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieArgs a -> f (HieArgs b) Source # sequenceA :: Applicative f => HieArgs (f a) -> f (HieArgs a) Source # mapM :: Monad m => (a -> m b) -> HieArgs a -> m (HieArgs b) Source # sequence :: Monad m => HieArgs (m a) -> m (HieArgs a) Source #
Functor HieArgs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieArgs a -> HieArgs b Source # (<$) :: a -> HieArgs b -> HieArgs a Source #
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

Foldable HieASTs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => HieASTs m -> m Source # foldMap :: Monoid m => (a -> m) -> HieASTs a -> m Source # foldMap' :: Monoid m => (a -> m) -> HieASTs a -> m Source # foldr :: (a -> b -> b) -> b -> HieASTs a -> b Source # foldr' :: (a -> b -> b) -> b -> HieASTs a -> b Source # foldl :: (b -> a -> b) -> b -> HieASTs a -> b Source # foldl' :: (b -> a -> b) -> b -> HieASTs a -> b Source # foldr1 :: (a -> a -> a) -> HieASTs a -> a Source # foldl1 :: (a -> a -> a) -> HieASTs a -> a Source # toList :: HieASTs a -> [a] Source # null :: HieASTs a -> Bool Source # length :: HieASTs a -> Int Source # elem :: Eq a => a -> HieASTs a -> Bool Source # maximum :: Ord a => HieASTs a -> a Source # minimum :: Ord a => HieASTs a -> a Source # sum :: Num a => HieASTs a -> a Source # product :: Num a => HieASTs a -> a Source #
Traversable HieASTs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieASTs a -> f (HieASTs b) Source # sequenceA :: Applicative f => HieASTs (f a) -> f (HieASTs a) Source # mapM :: Monad m => (a -> m b) -> HieASTs a -> m (HieASTs b) Source # sequence :: Monad m => HieASTs (m a) -> m (HieASTs a) Source #
Functor HieASTs Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieASTs a -> HieASTs b Source # (<$) :: a -> HieASTs b -> HieASTs a Source #
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

Foldable HieAST Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => HieAST m -> m Source # foldMap :: Monoid m => (a -> m) -> HieAST a -> m Source # foldMap' :: Monoid m => (a -> m) -> HieAST a -> m Source # foldr :: (a -> b -> b) -> b -> HieAST a -> b Source # foldr' :: (a -> b -> b) -> b -> HieAST a -> b Source # foldl :: (b -> a -> b) -> b -> HieAST a -> b Source # foldl' :: (b -> a -> b) -> b -> HieAST a -> b Source # foldr1 :: (a -> a -> a) -> HieAST a -> a Source # foldl1 :: (a -> a -> a) -> HieAST a -> a Source # toList :: HieAST a -> [a] Source # null :: HieAST a -> Bool Source # length :: HieAST a -> Int Source # elem :: Eq a => a -> HieAST a -> Bool Source # maximum :: Ord a => HieAST a -> a Source # minimum :: Ord a => HieAST a -> a Source # sum :: Num a => HieAST a -> a Source # product :: Num a => HieAST a -> a Source #
Traversable HieAST Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> HieAST a -> f (HieAST b) Source # sequenceA :: Applicative f => HieAST (f a) -> f (HieAST a) Source # mapM :: Monad m => (a -> m b) -> HieAST a -> m (HieAST b) Source # sequence :: Monad m => HieAST (m a) -> m (HieAST a) Source #
Functor HieAST Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> HieAST a -> HieAST b Source # (<$) :: a -> HieAST b -> HieAST a Source #
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

Foldable SourcedNodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => SourcedNodeInfo m -> m Source # foldMap :: Monoid m => (a -> m) -> SourcedNodeInfo a -> m Source # foldMap' :: Monoid m => (a -> m) -> SourcedNodeInfo a -> m Source # foldr :: (a -> b -> b) -> b -> SourcedNodeInfo a -> b Source # foldr' :: (a -> b -> b) -> b -> SourcedNodeInfo a -> b Source # foldl :: (b -> a -> b) -> b -> SourcedNodeInfo a -> b Source # foldl' :: (b -> a -> b) -> b -> SourcedNodeInfo a -> b Source # foldr1 :: (a -> a -> a) -> SourcedNodeInfo a -> a Source # foldl1 :: (a -> a -> a) -> SourcedNodeInfo a -> a Source # toList :: SourcedNodeInfo a -> [a] Source # null :: SourcedNodeInfo a -> Bool Source # length :: SourcedNodeInfo a -> Int Source # elem :: Eq a => a -> SourcedNodeInfo a -> Bool Source # maximum :: Ord a => SourcedNodeInfo a -> a Source # minimum :: Ord a => SourcedNodeInfo a -> a Source # sum :: Num a => SourcedNodeInfo a -> a Source # product :: Num a => SourcedNodeInfo a -> a Source #
Traversable SourcedNodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> SourcedNodeInfo a -> f (SourcedNodeInfo b) Source # sequenceA :: Applicative f => SourcedNodeInfo (f a) -> f (SourcedNodeInfo a) Source # mapM :: Monad m => (a -> m b) -> SourcedNodeInfo a -> m (SourcedNodeInfo b) Source # sequence :: Monad m => SourcedNodeInfo (m a) -> m (SourcedNodeInfo a) Source #
Functor SourcedNodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> SourcedNodeInfo a -> SourcedNodeInfo b Source # (<$) :: a -> SourcedNodeInfo b -> SourcedNodeInfo a Source #
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

Enum NodeOrigin Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: NodeOrigin -> NodeOrigin Source # pred :: NodeOrigin -> NodeOrigin Source # toEnum :: Int -> NodeOrigin Source # fromEnum :: NodeOrigin -> Int Source # enumFrom :: NodeOrigin -> [NodeOrigin] Source # enumFromThen :: NodeOrigin -> NodeOrigin -> [NodeOrigin] Source # enumFromTo :: NodeOrigin -> NodeOrigin -> [NodeOrigin] Source # enumFromThenTo :: NodeOrigin -> NodeOrigin -> NodeOrigin -> [NodeOrigin] Source #
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 #
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

Foldable NodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => NodeInfo m -> m Source # foldMap :: Monoid m => (a -> m) -> NodeInfo a -> m Source # foldMap' :: Monoid m => (a -> m) -> NodeInfo a -> m Source # foldr :: (a -> b -> b) -> b -> NodeInfo a -> b Source # foldr' :: (a -> b -> b) -> b -> NodeInfo a -> b Source # foldl :: (b -> a -> b) -> b -> NodeInfo a -> b Source # foldl' :: (b -> a -> b) -> b -> NodeInfo a -> b Source # foldr1 :: (a -> a -> a) -> NodeInfo a -> a Source # foldl1 :: (a -> a -> a) -> NodeInfo a -> a Source # toList :: NodeInfo a -> [a] Source # null :: NodeInfo a -> Bool Source # length :: NodeInfo a -> Int Source # elem :: Eq a => a -> NodeInfo a -> Bool Source # maximum :: Ord a => NodeInfo a -> a Source # minimum :: Ord a => NodeInfo a -> a Source # sum :: Num a => NodeInfo a -> a Source # product :: Num a => NodeInfo a -> a Source #
Traversable NodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> NodeInfo a -> f (NodeInfo b) Source # sequenceA :: Applicative f => NodeInfo (f a) -> f (NodeInfo a) Source # mapM :: Monad m => (a -> m b) -> NodeInfo a -> m (NodeInfo b) Source # sequence :: Monad m => NodeInfo (m a) -> m (NodeInfo a) Source #
Functor NodeInfo Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> NodeInfo a -> NodeInfo b Source # (<$) :: a -> NodeInfo b -> NodeInfo a Source #
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

Foldable IdentifierDetails Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fold :: Monoid m => IdentifierDetails m -> m Source # foldMap :: Monoid m => (a -> m) -> IdentifierDetails a -> m Source # foldMap' :: Monoid m => (a -> m) -> IdentifierDetails a -> m Source # foldr :: (a -> b -> b) -> b -> IdentifierDetails a -> b Source # foldr' :: (a -> b -> b) -> b -> IdentifierDetails a -> b Source # foldl :: (b -> a -> b) -> b -> IdentifierDetails a -> b Source # foldl' :: (b -> a -> b) -> b -> IdentifierDetails a -> b Source # foldr1 :: (a -> a -> a) -> IdentifierDetails a -> a Source # foldl1 :: (a -> a -> a) -> IdentifierDetails a -> a Source # toList :: IdentifierDetails a -> [a] Source # null :: IdentifierDetails a -> Bool Source # length :: IdentifierDetails a -> Int Source # elem :: Eq a => a -> IdentifierDetails a -> Bool Source # maximum :: Ord a => IdentifierDetails a -> a Source # minimum :: Ord a => IdentifierDetails a -> a Source # sum :: Num a => IdentifierDetails a -> a Source # product :: Num a => IdentifierDetails a -> a Source #
Traversable IdentifierDetails Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods traverse :: Applicative f => (a -> f b) -> IdentifierDetails a -> f (IdentifierDetails b) Source # sequenceA :: Applicative f => IdentifierDetails (f a) -> f (IdentifierDetails a) Source # mapM :: Monad m => (a -> m b) -> IdentifierDetails a -> m (IdentifierDetails b) Source # sequence :: Monad m => IdentifierDetails (m a) -> m (IdentifierDetails a) Source #
Functor IdentifierDetails Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods fmap :: (a -> b) -> IdentifierDetails a -> IdentifierDetails b Source # (<$) :: a -> IdentifierDetails b -> IdentifierDetails a Source #
Monoid (IdentifierDetails a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods mempty :: IdentifierDetails a Source # mappend :: IdentifierDetails a -> IdentifierDetails a -> IdentifierDetails a Source # mconcat :: [IdentifierDetails a] -> IdentifierDetails a Source #
Semigroup (IdentifierDetails a) Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods (<>) :: IdentifierDetails a -> IdentifierDetails a -> IdentifierDetails a Source # sconcat :: NonEmpty (IdentifierDetails a) -> IdentifierDetails a Source # stimes :: Integral b => b -> IdentifierDetails a -> IdentifierDetails a Source #
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 #
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

Enum IEType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: IEType -> IEType Source # pred :: IEType -> IEType Source # toEnum :: Int -> IEType Source # fromEnum :: IEType -> Int Source # enumFrom :: IEType -> [IEType] Source # enumFromThen :: IEType -> IEType -> [IEType] Source # enumFromTo :: IEType -> IEType -> [IEType] Source # enumFromThenTo :: IEType -> IEType -> IEType -> [IEType] Source #
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 #
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

Enum RecFieldContext Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: RecFieldContext -> RecFieldContext Source # pred :: RecFieldContext -> RecFieldContext Source # toEnum :: Int -> RecFieldContext Source # fromEnum :: RecFieldContext -> Int Source # enumFrom :: RecFieldContext -> [RecFieldContext] Source # enumFromThen :: RecFieldContext -> RecFieldContext -> [RecFieldContext] Source # enumFromTo :: RecFieldContext -> RecFieldContext -> [RecFieldContext] Source # enumFromThenTo :: RecFieldContext -> RecFieldContext -> RecFieldContext -> [RecFieldContext] Source #
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 #
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

Enum BindType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: BindType -> BindType Source # pred :: BindType -> BindType Source # toEnum :: Int -> BindType Source # fromEnum :: BindType -> Int Source # enumFrom :: BindType -> [BindType] Source # enumFromThen :: BindType -> BindType -> [BindType] Source # enumFromTo :: BindType -> BindType -> [BindType] Source # enumFromThenTo :: BindType -> BindType -> BindType -> [BindType] Source #
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 #
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

Enum DeclType Source # |
Instance details Defined in GHC.Iface.Ext.Types Methods succ :: DeclType -> DeclType Source # pred :: DeclType -> DeclType Source # toEnum :: Int -> DeclType Source # fromEnum :: DeclType -> Int Source # enumFrom :: DeclType -> [DeclType] Source # enumFromThen :: DeclType -> DeclType -> [DeclType] Source # enumFromTo :: DeclType -> DeclType -> [DeclType] Source # enumFromThenTo :: DeclType -> DeclType -> DeclType -> [DeclType] Source #
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 #
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

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 Source # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Scope Source # toConstr :: Scope -> Constr Source # dataTypeOf :: Scope -> DataType Source # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Scope) Source # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Scope) Source # gmapT :: (forall b. Data b => b -> b) -> Scope -> Scope Source # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Scope -> r Source # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Scope -> r Source # gmapQ :: (forall d. Data d => d -> u) -> Scope -> [u] Source # gmapQi :: Int -> (forall d. Data d => d -> u) -> Scope -> u Source # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Scope -> m Scope Source # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Scope -> m Scope Source # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Scope -> m Scope Source #
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 #
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 #