Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- type Span = RealSrcSpan
- hieVersion :: Integer
- data HieFile = HieFile {}
- type TypeIndex = Int
- data HieType a
- 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 {}
- data HieAST a = Node {
- sourcedNodeInfo :: SourcedNodeInfo a
- nodeSpan :: Span
- nodeChildren :: [HieAST a]
- newtype SourcedNodeInfo a = SourcedNodeInfo {
- getSourcedNodeInfo :: Map NodeOrigin (NodeInfo a)
- data NodeOrigin
- data NodeAnnotation = NodeAnnotation {}
- 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
- data BindType
- data DeclType
- data Scope
- data TyVarScope
- = ResolvedScopes [Scope]
- | UnresolvedScope [Name] (Maybe Span)
- data HieName
- hieNameOcc :: HieName -> OccName
- toHieName :: Name -> HieName
Documentation
type Span = RealSrcSpan Source #
hieVersion :: Integer Source #
Current version of .hie
files
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.
HieFile | |
|
A flattened version of Type
.
See Note [Efficient serialization of redundant type info]
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: |
HLitTy IfaceTyLit | |
HCastTy a | |
HCoercionTy |
Instances
Foldable HieType Source # | |
Defined in GHC.Iface.Ext.Types 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 # elem :: Eq a => a -> HieType a -> Bool # maximum :: Ord a => HieType a -> a # minimum :: Ord a => HieType a -> a # | |
Traversable HieType Source # | |
Functor HieType Source # | |
Binary (HieType TypeIndex) Source # | |
Eq a => Eq (HieType a) Source # | |
type HieTypeFlat = HieType TypeIndex Source #
newtype HieTypeFix Source #
Roughly isomorphic to the original core Type
.
Instances
Eq HieTypeFix Source # | |
Defined in GHC.Iface.Ext.Types (==) :: HieTypeFix -> HieTypeFix -> Bool # (/=) :: HieTypeFix -> HieTypeFix -> Bool # |
A list of type arguments along with their respective visibilities (ie. is
this an argument that would return True
for isVisibleArgFlag
?).
Instances
Foldable HieArgs Source # | |
Defined in GHC.Iface.Ext.Types 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 # elem :: Eq a => a -> HieArgs a -> Bool # maximum :: Ord a => HieArgs a -> a # minimum :: Ord a => HieArgs a -> a # | |
Traversable HieArgs Source # | |
Functor HieArgs Source # | |
Binary (HieArgs TypeIndex) Source # | |
Eq a => Eq (HieArgs a) Source # | |
type HiePath = LexicalFastString Source #
pattern HiePath :: FastString -> HiePath Source #
Mapping from filepaths to the corresponding AST
Instances
Foldable HieASTs Source # | |
Defined in GHC.Iface.Ext.Types 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 # elem :: Eq a => a -> HieASTs a -> Bool # maximum :: Ord a => HieASTs a -> a # minimum :: Ord a => HieASTs a -> a # | |
Traversable HieASTs Source # | |
Functor HieASTs Source # | |
Binary (HieASTs TypeIndex) Source # | |
Outputable a => Outputable (HieASTs a) Source # | |
Defined in GHC.Iface.Ext.Types |
Node | |
|
Instances
Foldable HieAST Source # | |
Defined in GHC.Iface.Ext.Types 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 # elem :: Eq a => a -> HieAST a -> Bool # maximum :: Ord a => HieAST a -> a # minimum :: Ord a => HieAST a -> a # | |
Traversable HieAST Source # | |
Functor HieAST Source # | |
Binary (HieAST TypeIndex) Source # | |
Outputable a => Outputable (HieAST a) Source # | |
Defined in GHC.Iface.Ext.Types |
newtype SourcedNodeInfo a Source #
NodeInfos grouped by source
Instances
data NodeOrigin Source #
Source of node info
Instances
data NodeAnnotation Source #
A node annotation
NodeAnnotation | |
|
Instances
Binary NodeAnnotation Source # | |
Defined in GHC.Iface.Ext.Types put_ :: BinHandle -> NodeAnnotation -> IO () # put :: BinHandle -> NodeAnnotation -> IO (Bin NodeAnnotation) # get :: BinHandle -> IO NodeAnnotation # | |
Outputable NodeAnnotation Source # | |
Defined in GHC.Iface.Ext.Types ppr :: NodeAnnotation -> SDoc # | |
Eq NodeAnnotation Source # | |
Defined in GHC.Iface.Ext.Types (==) :: NodeAnnotation -> NodeAnnotation -> Bool # (/=) :: NodeAnnotation -> NodeAnnotation -> Bool # | |
Ord NodeAnnotation Source # | |
Defined in GHC.Iface.Ext.Types compare :: NodeAnnotation -> NodeAnnotation -> Ordering # (<) :: NodeAnnotation -> NodeAnnotation -> Bool # (<=) :: NodeAnnotation -> NodeAnnotation -> Bool # (>) :: NodeAnnotation -> NodeAnnotation -> Bool # (>=) :: NodeAnnotation -> NodeAnnotation -> Bool # max :: NodeAnnotation -> NodeAnnotation -> NodeAnnotation # min :: NodeAnnotation -> NodeAnnotation -> NodeAnnotation # |
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]).
NodeInfo | |
|
Instances
Foldable NodeInfo Source # | |
Defined in GHC.Iface.Ext.Types 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 # elem :: Eq a => a -> NodeInfo a -> Bool # maximum :: Ord a => NodeInfo a -> a # minimum :: Ord a => NodeInfo a -> a # | |
Traversable NodeInfo Source # | |
Functor NodeInfo Source # | |
Binary (NodeInfo TypeIndex) Source # | |
Outputable a => Outputable (NodeInfo a) Source # | |
Defined in GHC.Iface.Ext.Types |
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)
Instances
data ContextInfo Source #
Different contexts under which identifiers exist
Use | regular variable |
MatchBind | |
IEThing IEType | import/export |
TyDecl | |
ValBind | Value binding |
PatternBind | Pattern binding This case is tricky because the bound identifier can be used in two
distinct scopes. Consider the following example (with do (b, a, (a -> True)) <- bar foo a The identifier |
ClassTyDecl (Maybe Span) | |
Decl | Declaration |
TyVarBind Scope TyVarScope | Type variable |
RecField RecFieldContext (Maybe Span) | Record field |
EvidenceVarBind | Constraint/Dictionary evidence variable binding |
| |
EvidenceVarUse | Usage of evidence variable |
Instances
Binary ContextInfo Source # | |
Defined in GHC.Iface.Ext.Types put_ :: BinHandle -> ContextInfo -> IO () # put :: BinHandle -> ContextInfo -> IO (Bin ContextInfo) # get :: BinHandle -> IO ContextInfo # | |
Outputable ContextInfo Source # | |
Defined in GHC.Iface.Ext.Types ppr :: ContextInfo -> SDoc # | |
Eq ContextInfo Source # | |
Defined in GHC.Iface.Ext.Types (==) :: ContextInfo -> ContextInfo -> Bool # (/=) :: ContextInfo -> ContextInfo -> Bool # | |
Ord ContextInfo Source # | |
Defined in GHC.Iface.Ext.Types compare :: ContextInfo -> ContextInfo -> Ordering # (<) :: ContextInfo -> ContextInfo -> Bool # (<=) :: ContextInfo -> ContextInfo -> Bool # (>) :: ContextInfo -> ContextInfo -> Bool # (>=) :: ContextInfo -> ContextInfo -> Bool # max :: ContextInfo -> ContextInfo -> ContextInfo # min :: ContextInfo -> ContextInfo -> ContextInfo # |
data EvVarSource Source #
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 |
| |
EvLetBind EvBindDeps | A direct let binding |
Instances
Binary EvVarSource Source # | |
Defined in GHC.Iface.Ext.Types put_ :: BinHandle -> EvVarSource -> IO () # put :: BinHandle -> EvVarSource -> IO (Bin EvVarSource) # get :: BinHandle -> IO EvVarSource # | |
Outputable EvVarSource Source # | |
Defined in GHC.Iface.Ext.Types ppr :: EvVarSource -> SDoc # | |
Eq EvVarSource Source # | |
Defined in GHC.Iface.Ext.Types (==) :: EvVarSource -> EvVarSource -> Bool # (/=) :: EvVarSource -> EvVarSource -> Bool # | |
Ord EvVarSource Source # | |
Defined in GHC.Iface.Ext.Types 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
EvBindDeps | |
|
Instances
Binary EvBindDeps Source # | |
Defined in GHC.Iface.Ext.Types put_ :: BinHandle -> EvBindDeps -> IO () # put :: BinHandle -> EvBindDeps -> IO (Bin EvBindDeps) # get :: BinHandle -> IO EvBindDeps # | |
Outputable EvBindDeps Source # | |
Defined in GHC.Iface.Ext.Types ppr :: EvBindDeps -> SDoc # | |
Eq EvBindDeps Source # | |
Defined in GHC.Iface.Ext.Types (==) :: EvBindDeps -> EvBindDeps -> Bool # (/=) :: EvBindDeps -> EvBindDeps -> Bool # | |
Ord EvBindDeps Source # | |
Defined in GHC.Iface.Ext.Types compare :: EvBindDeps -> EvBindDeps -> Ordering # (<) :: EvBindDeps -> EvBindDeps -> Bool # (<=) :: EvBindDeps -> EvBindDeps -> Bool # (>) :: EvBindDeps -> EvBindDeps -> Bool # (>=) :: EvBindDeps -> EvBindDeps -> Bool # max :: EvBindDeps -> EvBindDeps -> EvBindDeps # min :: EvBindDeps -> EvBindDeps -> EvBindDeps # |
Types of imports and exports
data RecFieldContext Source #
Instances
Instances
Enum BindType Source # | |
Binary BindType Source # | |
Outputable BindType Source # | |
Defined in GHC.Iface.Ext.Types | |
Eq BindType Source # | |
Ord BindType Source # | |
Defined in GHC.Iface.Ext.Types |
FamDec | type or data family |
SynDec | type synonym |
DataDec | data declaration |
ConDec | constructor declaration |
PatSynDec | pattern synonym |
ClassDec | class declaration |
InstDec | instance declaration |
Instances
Enum DeclType Source # | |
Binary DeclType Source # | |
Outputable DeclType Source # | |
Defined in GHC.Iface.Ext.Types | |
Eq DeclType Source # | |
Ord DeclType Source # | |
Defined in GHC.Iface.Ext.Types |
Instances
Data Scope Source # | |
Defined in GHC.Iface.Ext.Types 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 # 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 # | |
Binary Scope Source # | |
Outputable Scope Source # | |
Defined in GHC.Iface.Ext.Types | |
Eq Scope Source # | |
Ord Scope Source # | |
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
which later gets resolved into a UnresolvedScope
[foo, bar, baz] NothingResolvedScopes
.
ResolvedScopes [Scope] | |
UnresolvedScope | Unresolved scopes should never show up in the final |
Instances
Binary TyVarScope Source # | |
Defined in GHC.Iface.Ext.Types put_ :: BinHandle -> TyVarScope -> IO () # put :: BinHandle -> TyVarScope -> IO (Bin TyVarScope) # get :: BinHandle -> IO TyVarScope # | |
Outputable TyVarScope Source # | |
Defined in GHC.Iface.Ext.Types ppr :: TyVarScope -> SDoc # | |
Eq TyVarScope Source # | |
Defined in GHC.Iface.Ext.Types (==) :: TyVarScope -> TyVarScope -> Bool # (/=) :: TyVarScope -> TyVarScope -> Bool # | |
Ord TyVarScope Source # | |
Defined in GHC.Iface.Ext.Types compare :: TyVarScope -> TyVarScope -> Ordering # (<) :: TyVarScope -> TyVarScope -> Bool # (<=) :: TyVarScope -> TyVarScope -> Bool # (>) :: TyVarScope -> TyVarScope -> Bool # (>=) :: TyVarScope -> TyVarScope -> Bool # max :: TyVarScope -> TyVarScope -> TyVarScope # min :: TyVarScope -> TyVarScope -> TyVarScope # |
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.
hieNameOcc :: HieName -> OccName Source #