HsDecls

ghc-7.0.4: The GHC API

HsDecls

Contents

- Toplevel declarations
  - Class or type declarations
  - Instance declarations
  - Standalone deriving declarations
  - `RULE` declarations
  - `default` declarations
  - Top-level template haskell splice
  - Foreign function interface declarations
  - Data-constructor declarations
  - Document comments
  - Deprecations
  - Annotations
- Grouping

Description

Abstract syntax of global declarations.

Definitions for: `TyDecl` and `ConDecl`, `ClassDecl`, `InstDecl`, `DefaultDecl` and `ForeignDecl`.

Synopsis

- data HsDecl id
  - = TyClD (TyClDecl id)
  - | InstD (InstDecl id)
  - | DerivD (DerivDecl id)
  - | ValD (HsBind id)
  - | SigD (Sig id)
  - | DefD (DefaultDecl id)
  - | ForD (ForeignDecl id)
  - | WarningD (WarnDecl id)
  - | AnnD (AnnDecl id)
  - | RuleD (RuleDecl id)
  - | SpliceD (SpliceDecl id)
  - | DocD DocDecl
  - | QuasiQuoteD (HsQuasiQuote id)
- type LHsDecl id = Located (HsDecl id)
- data TyClDecl name
  - = ForeignType {
    - tcdLName :: Located name
    - tcdExtName :: Maybe FastString
    }
  - | TyFamily {
    - tcdFlavour :: FamilyFlavour
    - tcdLName :: Located name
    - tcdTyVars :: [LHsTyVarBndr name]
    - tcdKind :: Maybe Kind
    }
  - | TyData {
    - tcdND :: NewOrData
    - tcdCtxt :: LHsContext name
    - tcdLName :: Located name
    - tcdTyVars :: [LHsTyVarBndr name]
    - tcdTyPats :: Maybe [LHsType name]
    - tcdKindSig :: Maybe Kind
    - tcdCons :: [LConDecl name]
    - tcdDerivs :: Maybe [LHsType name]
    }
  - | TySynonym {
    - tcdLName :: Located name
    - tcdTyVars :: [LHsTyVarBndr name]
    - tcdTyPats :: Maybe [LHsType name]
    - tcdSynRhs :: LHsType name
    }
  - | ClassDecl {
    - tcdCtxt :: LHsContext name
    - tcdLName :: Located name
    - tcdTyVars :: [LHsTyVarBndr name]
    - tcdFDs :: [Located (FunDep name)]
    - tcdSigs :: [LSig name]
    - tcdMeths :: LHsBinds name
    - tcdATs :: [LTyClDecl name]
    - tcdDocs :: [LDocDecl]
    }
- type LTyClDecl name = Located (TyClDecl name)
- isClassDecl :: TyClDecl name -> Bool
- isSynDecl :: TyClDecl name -> Bool
- isDataDecl :: TyClDecl name -> Bool
- isTypeDecl :: TyClDecl name -> Bool
- isFamilyDecl :: TyClDecl name -> Bool
- isFamInstDecl :: TyClDecl name -> Bool
- tcdName :: TyClDecl name -> name
- tyClDeclTyVars :: TyClDecl name -> [LHsTyVarBndr name]
- countTyClDecls :: [TyClDecl name] -> (Int, Int, Int, Int, Int, Int)
- data InstDecl name = InstDecl (LHsType name) (LHsBinds name) [LSig name] [LTyClDecl name]
- type LInstDecl name = Located (InstDecl name)
- data NewOrData
  - = NewType
  - | DataType
- data FamilyFlavour
  - = TypeFamily
  - | DataFamily
- instDeclATs :: [LInstDecl name] -> [LTyClDecl name]
- data DerivDecl name = DerivDecl (LHsType name)
- type LDerivDecl name = Located (DerivDecl name)
- data RuleDecl name = HsRule RuleName Activation [RuleBndr name] (Located (HsExpr name)) NameSet (Located (HsExpr name)) NameSet
- type LRuleDecl name = Located (RuleDecl name)
- data RuleBndr name
  - = RuleBndr (Located name)
  - | RuleBndrSig (Located name) (LHsType name)
- collectRuleBndrSigTys :: [RuleBndr name] -> [LHsType name]
- data DefaultDecl name = DefaultDecl [LHsType name]
- type LDefaultDecl name = Located (DefaultDecl name)
- data SpliceDecl id = SpliceDecl (Located (HsExpr id)) HsExplicitFlag
- data ForeignDecl name
  - = ForeignImport (Located name) (LHsType name) ForeignImport
  - | ForeignExport (Located name) (LHsType name) ForeignExport
- type LForeignDecl name = Located (ForeignDecl name)
- data ForeignImport = CImport CCallConv Safety FastString CImportSpec
- data ForeignExport = CExport CExportSpec
- data CImportSpec
  - = CLabel CLabelString
  - | CFunction CCallTarget
  - | CWrapper
- data ConDecl name = ConDecl {
  - con_name :: Located name
  - con_explicit :: HsExplicitFlag
  - con_qvars :: [LHsTyVarBndr name]
  - con_cxt :: LHsContext name
  - con_details :: HsConDeclDetails name
  - con_res :: ResType name
  - con_doc :: Maybe LHsDocString
  - con_old_rec :: Bool
  }
- type LConDecl name = Located (ConDecl name)
- data ResType name
  - = ResTyH98
  - | ResTyGADT (LHsType name)
- type HsConDeclDetails name = HsConDetails (LBangType name) [ConDeclField name]
- hsConDeclArgTys :: HsConDeclDetails name -> [LBangType name]
- data DocDecl
  - = DocCommentNext HsDocString
  - | DocCommentPrev HsDocString
  - | DocCommentNamed String HsDocString
  - | DocGroup Int HsDocString
- type LDocDecl = Located DocDecl
- docDeclDoc :: DocDecl -> HsDocString
- data WarnDecl name = Warning name WarningTxt
- type LWarnDecl name = Located (WarnDecl name)
- data AnnDecl name = HsAnnotation (AnnProvenance name) (Located (HsExpr name))
- type LAnnDecl name = Located (AnnDecl name)
- data AnnProvenance name
  - = ValueAnnProvenance name
  - | TypeAnnProvenance name
  - | ModuleAnnProvenance
- annProvenanceName_maybe :: AnnProvenance name -> Maybe name
- modifyAnnProvenanceNameM :: Monad m => (before -> m after) -> AnnProvenance before -> m (AnnProvenance after)
- data HsGroup id = HsGroup {
  - hs_valds :: HsValBinds id
  - hs_tyclds :: [[LTyClDecl id]]
  - hs_instds :: [LInstDecl id]
  - hs_derivds :: [LDerivDecl id]
  - hs_fixds :: [LFixitySig id]
  - hs_defds :: [LDefaultDecl id]
  - hs_fords :: [LForeignDecl id]
  - hs_warnds :: [LWarnDecl id]
  - hs_annds :: [LAnnDecl id]
  - hs_ruleds :: [LRuleDecl id]
  - hs_docs :: [LDocDecl]
  }
- emptyRdrGroup :: HsGroup a
- emptyRnGroup :: HsGroup a
- appendGroups :: HsGroup a -> HsGroup a -> HsGroup a

# Toplevel declarations

data HsDecl id

A Haskell Declaration

Constructors

TyClD (TyClDecl id) | A type or class declaration.
InstD (InstDecl id) | An instance declaration.
DerivD (DerivDecl id) |
ValD (HsBind id) |
SigD (Sig id) |
DefD (DefaultDecl id) |
ForD (ForeignDecl id) |
WarningD (WarnDecl id) |
AnnD (AnnDecl id) |
RuleD (RuleDecl id) |
SpliceD (SpliceDecl id) |
DocD DocDecl |
QuasiQuoteD (HsQuasiQuote id) |

Instances

Typeable1 HsDecl |
Data id => Data (HsDecl id) |
OutputableBndr name => Outputable (HsDecl name) |

type LHsDecl id = Located (HsDecl id)

## Class or type declarations

data TyClDecl name

A type or class declaration.

Constructors

ForeignType |
Fields tcdLName :: Located name tcdExtName :: Maybe FastString
TyFamily |
    type/data family T :: *->*
Fields tcdFlavour :: FamilyFlavour tcdLName :: Located name tcdTyVars :: [LHsTyVarBndr name] tcdKind :: Maybe Kind
TyData | Declares a data type or newtype, giving its construcors `data/newtype T a = constrs data/newtype instance T [a] = constrs`
Fields tcdND :: NewOrData tcdCtxt :: LHsContext name Context tcdLName :: Located name tcdTyVars :: [LHsTyVarBndr name] tcdTyPats :: Maybe [LHsType name] Type patterns. `Just [t1..tn]` for `data instance T t1..tn = ...` in this case `tcdTyVars = fv( tcdTyPats )`. `Nothing` for everything else. tcdKindSig :: Maybe Kind Optional kind signature. `(Just k)` for a GADT-style `data`, or `data instance` decl with explicit kind sig tcdCons :: [LConDecl name] Data constructors For `data T a = T1 | T2 a` the `LConDecl`s all have `ResTyH98`. For `data T a where { T1 :: T a }` the `LConDecls` all have `ResTyGADT`. tcdDerivs :: Maybe [LHsType name] Derivings; `Nothing` => not specified, `Just []` => derive exactly what is asked These types must be of form `forall ab. C ty1 ty2` Typically the foralls and ty args are empty, but they are non-empty for the newtype-deriving case
TySynonym |
Fields tcdLName :: Located name tcdTyVars :: [LHsTyVarBndr name] tcdTyPats :: Maybe [LHsType name] Type patterns. `Just [t1..tn]` for `data instance T t1..tn = ...` in this case `tcdTyVars = fv( tcdTyPats )`. `Nothing` for everything else. tcdSynRhs :: LHsType name synonym expansion
ClassDecl |
Fields tcdCtxt :: LHsContext name Context tcdLName :: Located name tcdTyVars :: [LHsTyVarBndr name] tcdFDs :: [Located (FunDep name)] Functional deps tcdSigs :: [LSig name] Methods' signatures tcdMeths :: LHsBinds name Default methods tcdATs :: [LTyClDecl name] Associated types; ie only `TyFamily` and `TySynonym`; the latter for defaults tcdDocs :: [LDocDecl] Haddock docs

Instances

Typeable1 TyClDecl |
Data name => Data (TyClDecl name) |
OutputableBndr name => Outputable (TyClDecl name) |

type LTyClDecl name = Located (TyClDecl name)

isClassDecl :: TyClDecl name -> Bool

type class

isSynDecl :: TyClDecl name -> Bool

vanilla Haskell type synonym (ie, not a type instance)

isDataDecl :: TyClDecl name -> Bool

`True` = argument is a `data`/`newtype` or `data`/`newtype instance` declaration.

isTypeDecl :: TyClDecl name -> Bool

type or type instance declaration

isFamilyDecl :: TyClDecl name -> Bool

type family declaration

isFamInstDecl :: TyClDecl name -> Bool

family instance (types, newtypes, and data types)

tcdName :: TyClDecl name -> name

tyClDeclTyVars :: TyClDecl name -> [LHsTyVarBndr name]

countTyClDecls :: [TyClDecl name] -> (Int, Int, Int, Int, Int, Int)

## Instance declarations

data InstDecl name

Constructors

InstDecl (LHsType name) (LHsBinds name) [LSig name] [LTyClDecl name] |

Instances

Typeable1 InstDecl |
Data name => Data (InstDecl name) |
OutputableBndr name => Outputable (InstDecl name) |

type LInstDecl name = Located (InstDecl name)

data NewOrData

Constructors

NewType |
    newtype Blah ...
DataType |
    data Blah ...

Instances

Eq NewOrData |
Data NewOrData |
Typeable NewOrData |
Outputable NewOrData |

data FamilyFlavour

Constructors

TypeFamily |
    type family ...
DataFamily |
    data family ...

Instances

Data FamilyFlavour |
Typeable FamilyFlavour |

instDeclATs :: [LInstDecl name] -> [LTyClDecl name]

## Standalone deriving declarations

data DerivDecl name

Constructors

DerivDecl (LHsType name) |

Instances

Typeable1 DerivDecl |
Data name => Data (DerivDecl name) |
OutputableBndr name => Outputable (DerivDecl name) |

type LDerivDecl name = Located (DerivDecl name)

## `RULE` declarations

data RuleDecl name

Constructors

HsRule RuleName Activation [RuleBndr name] (Located (HsExpr name)) NameSet (Located (HsExpr name)) NameSet |

Instances

Typeable1 RuleDecl |
Data name => Data (RuleDecl name) |
OutputableBndr name => Outputable (RuleDecl name) |

type LRuleDecl name = Located (RuleDecl name)

data RuleBndr name

Constructors

RuleBndr (Located name) |
RuleBndrSig (Located name) (LHsType name) |

Instances

Typeable1 RuleBndr |
Data name => Data (RuleBndr name) |
OutputableBndr name => Outputable (RuleBndr name) |

collectRuleBndrSigTys :: [RuleBndr name] -> [LHsType name]

## `default` declarations

data DefaultDecl name

Constructors

DefaultDecl [LHsType name] |

Instances

Typeable1 DefaultDecl |
Data name => Data (DefaultDecl name) |
OutputableBndr name => Outputable (DefaultDecl name) |

type LDefaultDecl name = Located (DefaultDecl name)

## Top-level template haskell splice

data SpliceDecl id

Constructors

SpliceDecl (Located (HsExpr id)) HsExplicitFlag |

Instances

Typeable1 SpliceDecl |
Data id => Data (SpliceDecl id) |
OutputableBndr name => Outputable (SpliceDecl name) |

## Foreign function interface declarations

data ForeignDecl name

Constructors

ForeignImport (Located name) (LHsType name) ForeignImport |
ForeignExport (Located name) (LHsType name) ForeignExport |

Instances

Typeable1 ForeignDecl |
Data name => Data (ForeignDecl name) |
OutputableBndr name => Outputable (ForeignDecl name) |

type LForeignDecl name = Located (ForeignDecl name)

data ForeignImport

Constructors

CImport CCallConv Safety FastString CImportSpec |

Instances

Data ForeignImport |
Typeable ForeignImport |
Outputable ForeignImport |

data ForeignExport

Constructors

CExport CExportSpec |

Instances

Data ForeignExport |
Typeable ForeignExport |
Outputable ForeignExport |

data CImportSpec

Constructors

CLabel CLabelString |
CFunction CCallTarget |
CWrapper |

Instances

Data CImportSpec |
Typeable CImportSpec |

## Data-constructor declarations

data ConDecl name

Constructors

ConDecl |
Fields con_name :: Located name Constructor name. This is used for the DataCon itself, and for the user-callable wrapper Id. con_explicit :: HsExplicitFlag Is there an user-written forall? (cf. `HsForAllTy`) con_qvars :: [LHsTyVarBndr name] Type variables. Depending on `con_res` this describes the follewing entities ResTyH98: the constructor's *existential* type variables - ResTyGADT: *all* the constructor's quantified type variables con_cxt :: LHsContext name The context. This does not include the "stupid theta" which lives only in the `TyData` decl. con_details :: HsConDeclDetails name The main payload con_res :: ResType name Result type of the constructor con_doc :: Maybe LHsDocString A possible Haddock comment. con_old_rec :: Bool TEMPORARY field; True = user has employed now-deprecated syntax for GADT-style record decl C { blah } :: T a b Remove this when we no longer parse this stuff, and hence do not need to report decprecated use

Instances

Typeable1 ConDecl |
Data name => Data (ConDecl name) |
OutputableBndr name => Outputable (ConDecl name) |

type LConDecl name = Located (ConDecl name)

data ResType name

Constructors

ResTyH98 |
ResTyGADT (LHsType name) |

Instances

Typeable1 ResType |
Data name => Data (ResType name) |
OutputableBndr name => Outputable (ResType name) |

type HsConDeclDetails name = HsConDetails (LBangType name) [ConDeclField name]

hsConDeclArgTys :: HsConDeclDetails name -> [LBangType name]

## Document comments

data DocDecl

Constructors

DocCommentNext HsDocString |
DocCommentPrev HsDocString |
DocCommentNamed String HsDocString |
DocGroup Int HsDocString |

Instances

Data DocDecl |
Typeable DocDecl |
Outputable DocDecl |

type LDocDecl = Located DocDecl

docDeclDoc :: DocDecl -> HsDocString

## Deprecations

data WarnDecl name

Constructors

Warning name WarningTxt |

Instances

Typeable1 WarnDecl |
Data name => Data (WarnDecl name) |
OutputableBndr name => Outputable (WarnDecl name) |

type LWarnDecl name = Located (WarnDecl name)

## Annotations

data AnnDecl name

Constructors

HsAnnotation (AnnProvenance name) (Located (HsExpr name)) |

Instances

Typeable1 AnnDecl |
Data name => Data (AnnDecl name) |
OutputableBndr name => Outputable (AnnDecl name) |

type LAnnDecl name = Located (AnnDecl name)

data AnnProvenance name

Constructors

ValueAnnProvenance name |
TypeAnnProvenance name |
ModuleAnnProvenance |

Instances

Typeable1 AnnProvenance |
Data name => Data (AnnProvenance name) |

annProvenanceName_maybe :: AnnProvenance name -> Maybe name

modifyAnnProvenanceNameM :: Monad m => (before -> m after) -> AnnProvenance before -> m (AnnProvenance after)

# Grouping

data HsGroup id

A `HsDecl` is categorised into a `HsGroup` before being fed to the renamer.

Constructors

HsGroup |
Fields hs_valds :: HsValBinds id hs_tyclds :: [[LTyClDecl id]] hs_instds :: [LInstDecl id] hs_derivds :: [LDerivDecl id] hs_fixds :: [LFixitySig id] hs_defds :: [LDefaultDecl id] hs_fords :: [LForeignDecl id] hs_warnds :: [LWarnDecl id] hs_annds :: [LAnnDecl id] hs_ruleds :: [LRuleDecl id] hs_docs :: [LDocDecl]

Instances

Typeable1 HsGroup |
Data id => Data (HsGroup id) |
OutputableBndr name => Outputable (HsGroup name) |

emptyRdrGroup :: HsGroup a

emptyRnGroup :: HsGroup a

appendGroups :: HsGroup a -> HsGroup a -> HsGroup a