HieTypes

ghc-8.10.0.20200123: The GHC API

Safe Haskell | None
Language | Haskell2010

HieTypes

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
  - | HQualTy a a
  - | HLitTy IfaceTyLit
  - | HCastTy a
  - | HCoercionTy
- type HieTypeFlat = HieType TypeIndex
- newtype HieTypeFix = Roll (HieType HieTypeFix)
- newtype HieArgs a = HieArgs [(Bool, a)]
- newtype HieASTs a = HieASTs {
  - getAsts :: Map FastString (HieAST a)
  }
- data HieAST a = Node {
  - nodeInfo :: NodeInfo a
  - nodeSpan :: Span
  - nodeChildren :: [HieAST a]
  }
- data NodeInfo a = NodeInfo {
  - nodeAnnotations :: Set (FastString, FastString)
  - nodeType :: [a]
  - nodeIdentifiers :: NodeIdentifiers a
  }
- 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)
- 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)

# 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 # |
Instance details Defined in HieTypes 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 |
HQualTy a a | type with constraint: `t1 => t2` (see `IfaceDFunTy`)
HLitTy IfaceTyLit |
HCastTy a |
HCoercionTy |

#### Instances

Instances details

Functor HieType # |
Instance details Defined in HieTypes Methods fmap :: (a -> b) -> HieType a -> HieType b Source # (<$) :: a -> HieType b -> HieType a Source #
Foldable HieType # |
Instance details Defined in HieTypes 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 # |
Instance details Defined in HieTypes 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 #
Eq a => Eq (HieType a) # |
Instance details Defined in HieTypes Methods (==) :: HieType a -> HieType a -> Bool # (/=) :: HieType a -> HieType a -> Bool #
Binary (HieType TypeIndex) # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> HieType TypeIndex -> IO () Source # put :: BinHandle -> HieType TypeIndex -> IO (Bin (HieType TypeIndex)) Source # get :: BinHandle -> IO (HieType TypeIndex) Source #

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

Functor HieArgs # |
Instance details Defined in HieTypes Methods fmap :: (a -> b) -> HieArgs a -> HieArgs b Source # (<$) :: a -> HieArgs b -> HieArgs a Source #
Foldable HieArgs # |
Instance details Defined in HieTypes 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 # |
Instance details Defined in HieTypes 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 #
Eq a => Eq (HieArgs a) # |
Instance details Defined in HieTypes Methods (==) :: HieArgs a -> HieArgs a -> Bool # (/=) :: HieArgs a -> HieArgs a -> Bool #
Binary (HieArgs TypeIndex) # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> HieArgs TypeIndex -> IO () Source # put :: BinHandle -> HieArgs TypeIndex -> IO (Bin (HieArgs TypeIndex)) Source # get :: BinHandle -> IO (HieArgs TypeIndex) Source #

newtype HieASTs a Source #

Mapping from filepaths (represented using `FastString`) to the corresponding AST

Constructors

HieASTs |
Fields getAsts :: Map FastString (HieAST a)

#### Instances

Instances details

Functor HieASTs # |
Instance details Defined in HieTypes Methods fmap :: (a -> b) -> HieASTs a -> HieASTs b Source # (<$) :: a -> HieASTs b -> HieASTs a Source #
Foldable HieASTs # |
Instance details Defined in HieTypes 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 # |
Instance details Defined in HieTypes 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 #
Binary (HieASTs TypeIndex) # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> HieASTs TypeIndex -> IO () Source # put :: BinHandle -> HieASTs TypeIndex -> IO (Bin (HieASTs TypeIndex)) Source # get :: BinHandle -> IO (HieASTs TypeIndex) Source #

data HieAST a Source #

Constructors

Node |
Fields nodeInfo :: NodeInfo a nodeSpan :: Span nodeChildren :: [HieAST a]

#### Instances

Instances details

Functor HieAST # |
Instance details Defined in HieTypes Methods fmap :: (a -> b) -> HieAST a -> HieAST b Source # (<$) :: a -> HieAST b -> HieAST a Source #
Foldable HieAST # |
Instance details Defined in HieTypes 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 # |
Instance details Defined in HieTypes 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 #
Binary (HieAST TypeIndex) # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> HieAST TypeIndex -> IO () Source # put :: BinHandle -> HieAST TypeIndex -> IO (Bin (HieAST TypeIndex)) Source # get :: BinHandle -> IO (HieAST TypeIndex) Source #

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 (FastString, FastString) (name of the AST node constructor, name of the AST node Type) nodeType :: [a] The Haskell types of this node, if any. nodeIdentifiers :: NodeIdentifiers a All the identifiers and their details

#### Instances

Instances details

Functor NodeInfo # |
Instance details Defined in HieTypes Methods fmap :: (a -> b) -> NodeInfo a -> NodeInfo b Source # (<$) :: a -> NodeInfo b -> NodeInfo a Source #
Foldable NodeInfo # |
Instance details Defined in HieTypes 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 # |
Instance details Defined in HieTypes 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 #
Binary (NodeInfo TypeIndex) # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> NodeInfo TypeIndex -> IO () Source # put :: BinHandle -> NodeInfo TypeIndex -> IO (Bin (NodeInfo TypeIndex)) Source # get :: BinHandle -> IO (NodeInfo TypeIndex) 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 # |
Instance details Defined in HieTypes Methods fmap :: (a -> b) -> IdentifierDetails a -> IdentifierDetails b Source # (<$) :: a -> IdentifierDetails b -> IdentifierDetails a Source #
Foldable IdentifierDetails # |
Instance details Defined in HieTypes 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 # |
Instance details Defined in HieTypes 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 #
Eq a => Eq (IdentifierDetails a) # |
Instance details Defined in HieTypes Methods (==) :: IdentifierDetails a -> IdentifierDetails a -> Bool # (/=) :: IdentifierDetails a -> IdentifierDetails a -> Bool #
Semigroup (IdentifierDetails a) # |
Instance details Defined in HieTypes Methods (<>) :: IdentifierDetails a -> IdentifierDetails a -> IdentifierDetails a Source # sconcat :: NonEmpty (IdentifierDetails a) -> IdentifierDetails a Source # stimes :: Integral b => b -> IdentifierDetails a -> IdentifierDetails a Source #
Monoid (IdentifierDetails a) # |
Instance details Defined in HieTypes Methods mempty :: IdentifierDetails a Source # mappend :: IdentifierDetails a -> IdentifierDetails a -> IdentifierDetails a Source # mconcat :: [IdentifierDetails a] -> IdentifierDetails a Source #
Outputable a => Outputable (IdentifierDetails a) # |
Instance details Defined in HieTypes Methods ppr :: IdentifierDetails a -> SDoc Source # pprPrec :: Rational -> IdentifierDetails a -> SDoc Source #
Binary (IdentifierDetails TypeIndex) # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> IdentifierDetails TypeIndex -> IO () Source # put :: BinHandle -> IdentifierDetails TypeIndex -> IO (Bin (IdentifierDetails TypeIndex)) Source # get :: BinHandle -> IO (IdentifierDetails TypeIndex) Source #

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

#### Instances

Instances details

Eq ContextInfo # |
Instance details Defined in HieTypes Methods (==) :: ContextInfo -> ContextInfo -> Bool # (/=) :: ContextInfo -> ContextInfo -> Bool #
Ord ContextInfo # |
Instance details Defined in HieTypes 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 #
Show ContextInfo # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> ContextInfo -> ShowS Source # show :: ContextInfo -> String Source # showList :: [ContextInfo] -> ShowS Source #
Outputable ContextInfo # |
Instance details Defined in HieTypes Methods ppr :: ContextInfo -> SDoc Source # pprPrec :: Rational -> ContextInfo -> SDoc Source #
Binary ContextInfo # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> ContextInfo -> IO () Source # put :: BinHandle -> ContextInfo -> IO (Bin ContextInfo) Source # get :: BinHandle -> IO ContextInfo Source #

data IEType Source #

Types of imports and exports

Constructors

Import |
ImportAs |
ImportHiding |
Export |

#### Instances

Instances details

Enum IEType # |
Instance details Defined in HieTypes 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 #
Eq IEType # |
Instance details Defined in HieTypes Methods (==) :: IEType -> IEType -> Bool # (/=) :: IEType -> IEType -> Bool #
Ord IEType # |
Instance details Defined in HieTypes 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 #
Show IEType # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> IEType -> ShowS Source # show :: IEType -> String Source # showList :: [IEType] -> ShowS Source #
Binary IEType # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> IEType -> IO () Source # put :: BinHandle -> IEType -> IO (Bin IEType) Source # get :: BinHandle -> IO IEType Source #

data RecFieldContext Source #

Constructors

RecFieldDecl |
RecFieldAssign |
RecFieldMatch |
RecFieldOcc |

#### Instances

Instances details

Enum RecFieldContext # |
Instance details Defined in HieTypes 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 #
Eq RecFieldContext # |
Instance details Defined in HieTypes Methods (==) :: RecFieldContext -> RecFieldContext -> Bool # (/=) :: RecFieldContext -> RecFieldContext -> Bool #
Ord RecFieldContext # |
Instance details Defined in HieTypes 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 #
Show RecFieldContext # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> RecFieldContext -> ShowS Source # show :: RecFieldContext -> String Source # showList :: [RecFieldContext] -> ShowS Source #
Binary RecFieldContext # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> RecFieldContext -> IO () Source # put :: BinHandle -> RecFieldContext -> IO (Bin RecFieldContext) Source # get :: BinHandle -> IO RecFieldContext Source #

data BindType Source #

Constructors

RegularBind |
InstanceBind |

#### Instances

Instances details

Enum BindType # |
Instance details Defined in HieTypes 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 #
Eq BindType # |
Instance details Defined in HieTypes Methods (==) :: BindType -> BindType -> Bool # (/=) :: BindType -> BindType -> Bool #
Ord BindType # |
Instance details Defined in HieTypes 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 #
Show BindType # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> BindType -> ShowS Source # show :: BindType -> String Source # showList :: [BindType] -> ShowS Source #
Binary BindType # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> BindType -> IO () Source # put :: BinHandle -> BindType -> IO (Bin BindType) Source # get :: BinHandle -> IO BindType Source #

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 # |
Instance details Defined in HieTypes 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 #
Eq DeclType # |
Instance details Defined in HieTypes Methods (==) :: DeclType -> DeclType -> Bool # (/=) :: DeclType -> DeclType -> Bool #
Ord DeclType # |
Instance details Defined in HieTypes 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 #
Show DeclType # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> DeclType -> ShowS Source # show :: DeclType -> String Source # showList :: [DeclType] -> ShowS Source #
Binary DeclType # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> DeclType -> IO () Source # put :: BinHandle -> DeclType -> IO (Bin DeclType) Source # get :: BinHandle -> IO DeclType Source #

data Scope Source #

Constructors

NoScope |
LocalScope Span |
ModuleScope |

#### Instances

Instances details

Eq Scope # |
Instance details Defined in HieTypes Methods (==) :: Scope -> Scope -> Bool # (/=) :: Scope -> Scope -> Bool #
Data Scope # |
Instance details Defined in HieTypes 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 #
Ord Scope # |
Instance details Defined in HieTypes 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 #
Show Scope # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> Scope -> ShowS Source # show :: Scope -> String Source # showList :: [Scope] -> ShowS Source #
Outputable Scope # |
Instance details Defined in HieTypes Methods ppr :: Scope -> SDoc Source # pprPrec :: Rational -> Scope -> SDoc Source #
Binary Scope # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> Scope -> IO () Source # put :: BinHandle -> Scope -> IO (Bin Scope) Source # get :: BinHandle -> IO 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 ``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

Eq TyVarScope # |
Instance details Defined in HieTypes Methods (==) :: TyVarScope -> TyVarScope -> Bool # (/=) :: TyVarScope -> TyVarScope -> Bool #
Ord TyVarScope # |
Instance details Defined in HieTypes 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 #
Show TyVarScope # |
Instance details Defined in HieTypes Methods showsPrec :: Int -> TyVarScope -> ShowS Source # show :: TyVarScope -> String Source # showList :: [TyVarScope] -> ShowS Source #
Binary TyVarScope # |
Instance details Defined in HieTypes Methods put_ :: BinHandle -> TyVarScope -> IO () Source # put :: BinHandle -> TyVarScope -> IO (Bin TyVarScope) Source # get :: BinHandle -> IO TyVarScope Source #