| ghc-6.12.3: The GHC API | Contents | Index

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

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
tyClDeclNames :: Eq name => TyClDecl name -> [Located 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 :: InstDecl 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))

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 :: HsExplicitForAll
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]
hsConDeclsNames :: Eq name => [LConDecl name] -> [Located 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 |

Instances

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 |

tcdLName :: Located name |
tcdExtName :: Maybe FastString |

TyFamily

    type/data family T :: *->*

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`

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 |

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 |

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

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
tyClDeclNames :: Eq name => TyClDecl name -> [Located name]
Returns all the binding names of the decl, along with their SrcLocs. The first one is guaranteed to be the name of the decl. For record fields mentioned in multiple constructors, the SrcLoc will be from the first occurence. We use the equality to filter out duplicate field names
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

OutputableBndr name => Outputable (InstDecl name)

type LInstDecl name = Located (InstDecl name)
data NewOrData

Constructors

NewType

    newtype Blah ...

DataType

    data Blah ...

Instances

Eq NewOrData
Outputable NewOrData

data FamilyFlavour

Constructors

TypeFamily

    type family ...

DataFamily

    data family ...

instDeclATs :: InstDecl name -> [LTyClDecl name]
Standalone deriving declarations
data DerivDecl name

Constructors

DerivDecl (LHsType name) |

Instances

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

OutputableBndr name => Outputable (RuleDecl name)

type LRuleDecl name = Located (RuleDecl name)
data RuleBndr name

Constructors

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

Instances

OutputableBndr name => Outputable (RuleBndr name)

collectRuleBndrSigTys :: [RuleBndr name] -> [LHsType name]
`default` declarations
data DefaultDecl name

Constructors

DefaultDecl [LHsType name] |

Instances

OutputableBndr name => Outputable (DefaultDecl name)

type LDefaultDecl name = Located (DefaultDecl name)
Top-level template haskell splice
data SpliceDecl id

Constructors

SpliceDecl (Located (HsExpr id)) |

Instances

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

OutputableBndr name => Outputable (ForeignDecl name)

type LForeignDecl name = Located (ForeignDecl name)
data ForeignImport

Constructors

CImport CCallConv Safety FastString CImportSpec |

Instances

Outputable ForeignImport

data ForeignExport

Constructors

CExport CExportSpec |

Instances

Outputable ForeignExport

data CImportSpec

Constructors

CLabel CLabelString |
CFunction CCallTarget |
CWrapper |

Data-constructor declarations
data ConDecl name

Constructors

ConDecl |

con_name :: Located name | Constructor name. This is used for the DataCon itself, and for the user-callable wrapper Id.
con_explicit :: HsExplicitForAll | 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

OutputableBndr name => Outputable (ConDecl name)

type LConDecl name = Located (ConDecl name)
data ResType name

Constructors

ResTyH98 |
ResTyGADT (LHsType name) |

Instances

OutputableBndr name => Outputable (ResType name)

type HsConDeclDetails name = HsConDetails (LBangType name) [ConDeclField name]
hsConDeclArgTys :: HsConDeclDetails name -> [LBangType name]
hsConDeclsNames :: Eq name => [LConDecl name] -> [Located name]
Document comments
data DocDecl

Constructors

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

Instances

Outputable DocDecl

type LDocDecl = Located DocDecl
docDeclDoc :: DocDecl -> HsDocString
Deprecations
data WarnDecl name

Constructors

Warning name WarningTxt |

Instances

OutputableBndr name => Outputable (WarnDecl name)

type LWarnDecl name = Located (WarnDecl name)
Annotations
data AnnDecl name

Constructors

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

Instances

OutputableBndr name => Outputable (AnnDecl name)

type LAnnDecl name = Located (AnnDecl name)
data AnnProvenance name

Constructors

ValueAnnProvenance name |
TypeAnnProvenance name |
ModuleAnnProvenance |

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 |

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

OutputableBndr name => Outputable (HsGroup name)

emptyRdrGroup :: HsGroup a
emptyRnGroup :: HsGroup a
appendGroups :: HsGroup a -> HsGroup a -> HsGroup a
Produced by Haddock version 2.6.1