HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleghc-9.10.3GHC2021

GHC.Iface.Ext.Types

  • 27 types
  • 6 values
  • Packageghc-9.10.3
  • Exports34
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceTypes.hs
datadata HieFile
#

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

Instances1Binary
datadata HieType a
#

A flattened version of Type.

See Note [Efficient serialization of redundant type info]

Constructors

Instances5Functor, Foldable, Traversable, Eq, Binary
newtypenewtype HieArgs a
#

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

Constructors

Instances5Functor, Foldable, Traversable, Eq, Binary
newtypenewtype HieASTs a
#

Mapping from filepaths to the corresponding AST

Constructors

Instances5Functor, Foldable, Traversable, Outputable, Binary
datadata HieAST a
#
Instances5Functor, Foldable, Traversable, Outputable, Binary
newtypenewtype SourcedNodeInfo a
#

NodeInfos grouped by source

Instances5Functor, Foldable, Traversable, Outputable, Binary
datadata NodeInfo a
#

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

Instances5Functor, Foldable, Traversable, Outputable, Binary
datadata IdentifierDetails a
#

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)

Instances8Functor, Foldable, Traversable, Eq, Semigroup, Monoid, …
datadata ContextInfo
#

Different contexts under which identifiers exist

Constructors

Instances4Eq, Ord, Outputable, Binary
datadata EvVarSource
#

Constructors

Instances4Eq, Ord, Outputable, Binary
datadata DeclType
#

Constructors

Instances5Enum, Eq, Ord, Outputable, Binary
datadata TyVarScope
#

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

Instances4Eq, Ord, Outputable, Binary