ghc-6.12.1: The GHC APIContentsIndex
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
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
TyDataDeclares a data type or newtype, giving its construcors data/newtype T a = constrs data/newtype instance T [a] = constrs
tcdND :: NewOrData
tcdCtxt :: LHsContext nameContext
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 LConDecls 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 namesynonym expansion
ClassDecl
tcdCtxt :: LHsContext nameContext
tcdLName :: Located name
tcdTyVars :: [LHsTyVarBndr name]
tcdFDs :: [Located (FunDep name)]Functional deps
tcdSigs :: [LSig name]Methods' signatures
tcdMeths :: LHsBinds nameDefault methods
tcdATs :: [LTyClDecl name]Associated types; ie only TyFamily and TySynonym; the latter for defaults
tcdDocs :: [LDocDecl]Haddock docs
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]
type LInstDecl name = Located (InstDecl name)
data NewOrData
Constructors
NewType
newtype Blah ...
DataType
data Blah ...
data FamilyFlavour
Constructors
TypeFamily
type family ...
DataFamily
data family ...
instDeclATs :: InstDecl name -> [LTyClDecl name]
Standalone deriving declarations
data DerivDecl name
Constructors
DerivDecl (LHsType 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
type LRuleDecl name = Located (RuleDecl name)
data RuleBndr name
Constructors
RuleBndr (Located name)
RuleBndrSig (Located name) (LHsType name)
collectRuleBndrSigTys :: [RuleBndr name] -> [LHsType name]
default declarations
data DefaultDecl name
Constructors
DefaultDecl [LHsType name]
type LDefaultDecl name = Located (DefaultDecl name)
Top-level template haskell splice
data SpliceDecl id
Constructors
SpliceDecl (Located (HsExpr id))
Foreign function interface declarations
data ForeignDecl name
Constructors
ForeignImport (Located name) (LHsType name) ForeignImport
ForeignExport (Located name) (LHsType name) ForeignExport
type LForeignDecl name = Located (ForeignDecl name)
data ForeignImport
Constructors
CImport CCallConv Safety FastString CImportSpec
data ForeignExport
Constructors
CExport CExportSpec
data CImportSpec
Constructors
CLabel CLabelString
CFunction CCallTarget
CWrapper
Data-constructor declarations
data ConDecl name
Constructors
ConDecl
con_name :: Located nameConstructor name. This is used for the DataCon itself, and for the user-callable wrapper Id.
con_explicit :: HsExplicitForAllIs 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 nameThe context. This does not include the "stupid theta" which lives only in the TyData decl.
con_details :: HsConDeclDetails nameThe main payload
con_res :: ResType nameResult type of the constructor
con_doc :: Maybe LHsDocStringA possible Haddock comment.
con_old_rec :: BoolTEMPORARY 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
type LConDecl name = Located (ConDecl name)
data ResType name
Constructors
ResTyH98
ResTyGADT (LHsType 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
type LDocDecl = Located DocDecl
docDeclDoc :: DocDecl -> HsDocString
Deprecations
data WarnDecl name
Constructors
Warning name WarningTxt
type LWarnDecl name = Located (WarnDecl name)
Annotations
data AnnDecl name
Constructors
HsAnnotation (AnnProvenance name) (Located (HsExpr 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]
emptyRdrGroup :: HsGroup a
emptyRnGroup :: HsGroup a
appendGroups :: HsGroup a -> HsGroup a -> HsGroup a
Produced by Haddock version 2.6.0