Safe Haskell | None |
---|---|
Language | Haskell2010 |
- Toplevel declarations
- Class or type declarations
- Instance declarations
- Standalone deriving declarations
RULE
declarationsVECTORISE
declarationsdefault
declarations- Template haskell declaration splice
- Foreign function interface declarations
- Data-constructor declarations
- Document comments
- Deprecations
- Annotations
- Role annotations
- Injective type families
- Grouping
Abstract syntax of global declarations.
Definitions for: SynDecl
and ConDecl
, ClassDecl
,
InstDecl
, DefaultDecl
and ForeignDecl
.
- 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 (WarnDecls id)
- | AnnD (AnnDecl id)
- | RuleD (RuleDecls id)
- | VectD (VectDecl id)
- | SpliceD (SpliceDecl id)
- | DocD DocDecl
- | RoleAnnotD (RoleAnnotDecl id)
- type LHsDecl id = Located (HsDecl id)
- data HsDataDefn name = HsDataDefn {
- dd_ND :: NewOrData
- dd_ctxt :: LHsContext name
- dd_cType :: Maybe (Located CType)
- dd_kindSig :: Maybe (LHsKind name)
- dd_cons :: [LConDecl name]
- dd_derivs :: HsDeriving name
- type HsDeriving name = Maybe (Located [LHsSigType name])
- data TyClDecl name
- = FamDecl {
- tcdFam :: FamilyDecl name
- | SynDecl { }
- | DataDecl {
- tcdLName :: Located name
- tcdTyVars :: LHsQTyVars name
- tcdDataDefn :: HsDataDefn name
- tcdDataCusk :: PostRn name Bool
- tcdFVs :: PostRn name NameSet
- | ClassDecl { }
- = FamDecl {
- type LTyClDecl name = Located (TyClDecl name)
- data TyClGroup name = TyClGroup {
- group_tyclds :: [LTyClDecl name]
- group_roles :: [LRoleAnnotDecl name]
- tyClGroupConcat :: [TyClGroup name] -> [LTyClDecl name]
- mkTyClGroup :: [LTyClDecl name] -> TyClGroup name
- isClassDecl :: TyClDecl name -> Bool
- isDataDecl :: TyClDecl name -> Bool
- isSynDecl :: TyClDecl name -> Bool
- tcdName :: TyClDecl name -> name
- isFamilyDecl :: TyClDecl name -> Bool
- isTypeFamilyDecl :: TyClDecl name -> Bool
- isDataFamilyDecl :: TyClDecl name -> Bool
- isOpenTypeFamilyInfo :: FamilyInfo name -> Bool
- isClosedTypeFamilyInfo :: FamilyInfo name -> Bool
- tyFamInstDeclName :: TyFamInstDecl name -> name
- tyFamInstDeclLName :: TyFamInstDecl name -> Located name
- countTyClDecls :: [TyClDecl name] -> (Int, Int, Int, Int, Int)
- pprTyClDeclFlavour :: TyClDecl a -> SDoc
- tyClDeclLName :: TyClDecl name -> Located name
- tyClDeclTyVars :: TyClDecl name -> LHsQTyVars name
- hsDeclHasCusk :: TyClDecl Name -> Bool
- famDeclHasCusk :: Maybe Bool -> FamilyDecl name -> Bool
- data FamilyDecl name = FamilyDecl {
- fdInfo :: FamilyInfo name
- fdLName :: Located name
- fdTyVars :: LHsQTyVars name
- fdResultSig :: LFamilyResultSig name
- fdInjectivityAnn :: Maybe (LInjectivityAnn name)
- type LFamilyDecl name = Located (FamilyDecl name)
- data InstDecl name
- = ClsInstD {
- cid_inst :: ClsInstDecl name
- | DataFamInstD {
- dfid_inst :: DataFamInstDecl name
- | TyFamInstD {
- tfid_inst :: TyFamInstDecl name
- = ClsInstD {
- type LInstDecl name = Located (InstDecl name)
- data NewOrData
- data FamilyInfo name
- = DataFamily
- | OpenTypeFamily
- | ClosedTypeFamily (Maybe [LTyFamInstEqn name])
- data TyFamInstDecl name = TyFamInstDecl {
- tfid_eqn :: LTyFamInstEqn name
- tfid_fvs :: PostRn name NameSet
- type LTyFamInstDecl name = Located (TyFamInstDecl name)
- instDeclDataFamInsts :: [LInstDecl name] -> [DataFamInstDecl name]
- data DataFamInstDecl name = DataFamInstDecl {
- dfid_tycon :: Located name
- dfid_pats :: HsTyPats name
- dfid_defn :: HsDataDefn name
- dfid_fvs :: PostRn name NameSet
- type LDataFamInstDecl name = Located (DataFamInstDecl name)
- pprDataFamInstFlavour :: DataFamInstDecl name -> SDoc
- data TyFamEqn name pats = TyFamEqn {}
- type TyFamInstEqn name = TyFamEqn name (HsTyPats name)
- type LTyFamInstEqn name = Located (TyFamInstEqn name)
- type TyFamDefltEqn name = TyFamEqn name (LHsQTyVars name)
- type LTyFamDefltEqn name = Located (TyFamDefltEqn name)
- type HsTyPats name = HsImplicitBndrs name [LHsType name]
- type LClsInstDecl name = Located (ClsInstDecl name)
- data ClsInstDecl name = ClsInstDecl {
- cid_poly_ty :: LHsSigType name
- cid_binds :: LHsBinds name
- cid_sigs :: [LSig name]
- cid_tyfam_insts :: [LTyFamInstDecl name]
- cid_datafam_insts :: [LDataFamInstDecl name]
- cid_overlap_mode :: Maybe (Located OverlapMode)
- data DerivDecl name = DerivDecl {
- deriv_type :: LHsSigType name
- deriv_overlap_mode :: Maybe (Located OverlapMode)
- type LDerivDecl name = Located (DerivDecl name)
- type LRuleDecls name = Located (RuleDecls name)
- data RuleDecls name = HsRules {
- rds_src :: SourceText
- rds_rules :: [LRuleDecl name]
- data RuleDecl name = HsRule (Located (SourceText, RuleName)) Activation [LRuleBndr name] (Located (HsExpr name)) (PostRn name NameSet) (Located (HsExpr name)) (PostRn name NameSet)
- type LRuleDecl name = Located (RuleDecl name)
- data RuleBndr name
- = RuleBndr (Located name)
- | RuleBndrSig (Located name) (LHsSigWcType name)
- type LRuleBndr name = Located (RuleBndr name)
- collectRuleBndrSigTys :: [RuleBndr name] -> [LHsSigWcType name]
- flattenRuleDecls :: [LRuleDecls name] -> [LRuleDecl name]
- pprFullRuleName :: Located (SourceText, RuleName) -> SDoc
- data VectDecl name
- = HsVect SourceText (Located name) (LHsExpr name)
- | HsNoVect SourceText (Located name)
- | HsVectTypeIn SourceText Bool (Located name) (Maybe (Located name))
- | HsVectTypeOut Bool TyCon (Maybe TyCon)
- | HsVectClassIn SourceText (Located name)
- | HsVectClassOut Class
- | HsVectInstIn (LHsSigType name)
- | HsVectInstOut ClsInst
- type LVectDecl name = Located (VectDecl name)
- lvectDeclName :: NamedThing name => LVectDecl name -> Name
- lvectInstDecl :: LVectDecl name -> Bool
- data DefaultDecl name = DefaultDecl [LHsType name]
- type LDefaultDecl name = Located (DefaultDecl name)
- data SpliceExplicitFlag
- data SpliceDecl id = SpliceDecl (Located (HsSplice id)) SpliceExplicitFlag
- type LSpliceDecl name = Located (SpliceDecl name)
- data ForeignDecl name
- = ForeignImport {
- fd_name :: Located name
- fd_sig_ty :: LHsSigType name
- fd_co :: PostTc name Coercion
- fd_fi :: ForeignImport
- | ForeignExport {
- fd_name :: Located name
- fd_sig_ty :: LHsSigType name
- fd_co :: PostTc name Coercion
- fd_fe :: ForeignExport
- = ForeignImport {
- type LForeignDecl name = Located (ForeignDecl name)
- data ForeignImport = CImport (Located CCallConv) (Located Safety) (Maybe Header) CImportSpec (Located SourceText)
- data ForeignExport = CExport (Located CExportSpec) (Located SourceText)
- noForeignImportCoercionYet :: PlaceHolder
- noForeignExportCoercionYet :: PlaceHolder
- data CImportSpec
- data ConDecl name
- = ConDeclGADT {
- con_names :: [Located name]
- con_type :: LHsSigType name
- con_doc :: Maybe LHsDocString
- | ConDeclH98 {
- con_name :: Located name
- con_qvars :: Maybe (LHsQTyVars name)
- con_cxt :: Maybe (LHsContext name)
- con_details :: HsConDeclDetails name
- con_doc :: Maybe LHsDocString
- = ConDeclGADT {
- type LConDecl name = Located (ConDecl name)
- type HsConDeclDetails name = HsConDetails (LBangType name) (Located [LConDeclField name])
- hsConDeclArgTys :: HsConDeclDetails name -> [LBangType name]
- getConNames :: ConDecl name -> [Located name]
- getConDetails :: ConDecl name -> HsConDeclDetails name
- gadtDeclDetails :: LHsSigType name -> (HsConDeclDetails name, LHsType name, LHsContext name, [LHsTyVarBndr name])
- data DocDecl
- type LDocDecl = Located DocDecl
- docDeclDoc :: DocDecl -> HsDocString
- data WarnDecl name = Warning [Located name] WarningTxt
- type LWarnDecl name = Located (WarnDecl name)
- data WarnDecls name = Warnings {
- wd_src :: SourceText
- wd_warnings :: [LWarnDecl name]
- type LWarnDecls name = Located (WarnDecls name)
- data AnnDecl name = HsAnnotation SourceText (AnnProvenance name) (Located (HsExpr name))
- type LAnnDecl name = Located (AnnDecl name)
- data AnnProvenance name
- = ValueAnnProvenance (Located name)
- | TypeAnnProvenance (Located name)
- | ModuleAnnProvenance
- annProvenanceName_maybe :: AnnProvenance name -> Maybe name
- data RoleAnnotDecl name = RoleAnnotDecl (Located name) [Located (Maybe Role)]
- type LRoleAnnotDecl name = Located (RoleAnnotDecl name)
- roleAnnotDeclName :: RoleAnnotDecl name -> name
- data FamilyResultSig name
- = NoSig
- | KindSig (LHsKind name)
- | TyVarSig (LHsTyVarBndr name)
- type LFamilyResultSig name = Located (FamilyResultSig name)
- data InjectivityAnn name = InjectivityAnn (Located name) [Located name]
- type LInjectivityAnn name = Located (InjectivityAnn name)
- resultVariableName :: FamilyResultSig a -> Maybe a
- data HsGroup id = HsGroup {
- hs_valds :: HsValBinds id
- hs_splcds :: [LSpliceDecl id]
- hs_tyclds :: [TyClGroup id]
- hs_instds :: [LInstDecl id]
- hs_derivds :: [LDerivDecl id]
- hs_fixds :: [LFixitySig id]
- hs_defds :: [LDefaultDecl id]
- hs_fords :: [LForeignDecl id]
- hs_warnds :: [LWarnDecls id]
- hs_annds :: [LAnnDecl id]
- hs_ruleds :: [LRuleDecls id]
- hs_vects :: [LVectDecl id]
- hs_docs :: [LDocDecl]
- emptyRdrGroup :: HsGroup a
- emptyRnGroup :: HsGroup a
- appendGroups :: HsGroup a -> HsGroup a -> HsGroup a
Toplevel declarations
A Haskell Declaration
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 (WarnDecls id) | |
AnnD (AnnDecl id) | |
RuleD (RuleDecls id) | |
VectD (VectDecl id) | |
SpliceD (SpliceDecl id) | |
DocD DocDecl | |
RoleAnnotD (RoleAnnotDecl id) |
DataId id => Data (HsDecl id) # | |
OutputableBndr name => Outputable (HsDecl name) # | |
data HsDataDefn name Source #
HsDataDefn | Declares a data type or newtype, giving its constructors
|
|
DataId id => Data (HsDataDefn id) # | |
OutputableBndr name => Outputable (HsDataDefn name) # | |
type HsDeriving name Source #
= Maybe (Located [LHsSigType name]) | The optional 'deriving' clause of a data declaration
It's a The payload of the Maybe is Located so that we have a
place to hang the API annotations:
- |
Class or type declarations
A type or class declaration.
FamDecl | type/data family T :: *->* |
| |
SynDecl |
|
DataDecl |
|
| |
ClassDecl | |
|
DataId id => Data (TyClDecl id) # | |
OutputableBndr name => Outputable (TyClDecl name) # | |
TyClGroup | |
|
DataId id => Data (TyClGroup id) # | |
OutputableBndr name => Outputable (TyClGroup name) # | |
tyClGroupConcat :: [TyClGroup name] -> [LTyClDecl name] Source #
mkTyClGroup :: [LTyClDecl name] -> TyClGroup name Source #
isClassDecl :: TyClDecl name -> Bool Source #
type class
isFamilyDecl :: TyClDecl name -> Bool Source #
type/data family declaration
isTypeFamilyDecl :: TyClDecl name -> Bool Source #
type family declaration
isDataFamilyDecl :: TyClDecl name -> Bool Source #
data family declaration
isOpenTypeFamilyInfo :: FamilyInfo name -> Bool Source #
open type family info
isClosedTypeFamilyInfo :: FamilyInfo name -> Bool Source #
closed type family info
tyFamInstDeclName :: TyFamInstDecl name -> name Source #
tyFamInstDeclLName :: TyFamInstDecl name -> Located name Source #
pprTyClDeclFlavour :: TyClDecl a -> SDoc Source #
tyClDeclLName :: TyClDecl name -> Located name Source #
tyClDeclTyVars :: TyClDecl name -> LHsQTyVars name Source #
hsDeclHasCusk :: TyClDecl Name -> Bool Source #
Does this declaration have a complete, user-supplied kind signature? See Note [Complete user-supplied kind signatures]
:: Maybe Bool | if associated, does the enclosing class have a CUSK? |
-> FamilyDecl name | |
-> Bool |
Does this family declaration have a complete, user-supplied kind signature?
data FamilyDecl name Source #
FamilyDecl | |
|
DataId id => Data (FamilyDecl id) # | |
OutputableBndr name => Outputable (FamilyDecl name) # | |
type LFamilyDecl name = Located (FamilyDecl name) Source #
Instance declarations
ClsInstD | |
| |
DataFamInstD | |
| |
TyFamInstD | |
|
DataId id => Data (InstDecl id) # | |
OutputableBndr name => Outputable (InstDecl name) # | |
data FamilyInfo name Source #
DataFamily | |
OpenTypeFamily | |
ClosedTypeFamily (Maybe [LTyFamInstEqn name]) |
|
DataId name => Data (FamilyInfo name) # | |
Outputable (FamilyInfo name) # | |
data TyFamInstDecl name Source #
TyFamInstDecl | |
|
DataId name => Data (TyFamInstDecl name) # | |
OutputableBndr name => Outputable (TyFamInstDecl name) # | |
type LTyFamInstDecl name = Located (TyFamInstDecl name) Source #
instDeclDataFamInsts :: [LInstDecl name] -> [DataFamInstDecl name] Source #
data DataFamInstDecl name Source #
DataFamInstDecl | |
|
DataId name => Data (DataFamInstDecl name) # | |
OutputableBndr name => Outputable (DataFamInstDecl name) # | |
type LDataFamInstDecl name = Located (DataFamInstDecl name) Source #
pprDataFamInstFlavour :: DataFamInstDecl name -> SDoc Source #
data TyFamEqn name pats Source #
One equation in a type family instance declaration See Note [Type family instance declarations in HsSyn]
type TyFamInstEqn name = TyFamEqn name (HsTyPats name) Source #
type LTyFamInstEqn name Source #
= Located (TyFamInstEqn name) | May have |
type TyFamDefltEqn name = TyFamEqn name (LHsQTyVars name) Source #
type LTyFamDefltEqn name = Located (TyFamDefltEqn name) Source #
= HsImplicitBndrs name [LHsType name] | Type patterns (with kind and type bndrs) See Note [Family instance declaration binders] |
type LClsInstDecl name = Located (ClsInstDecl name) Source #
data ClsInstDecl name Source #
ClsInstDecl | |
|
DataId id => Data (ClsInstDecl id) # | |
OutputableBndr name => Outputable (ClsInstDecl name) # | |
Standalone deriving declarations
DataId name => Data (DerivDecl name) # | |
OutputableBndr name => Outputable (DerivDecl name) # | |
type LDerivDecl name = Located (DerivDecl name) Source #
RULE
declarations
type LRuleDecls name = Located (RuleDecls name) Source #
HsRules | |
|
DataId name => Data (RuleDecls name) # | |
OutputableBndr name => Outputable (RuleDecls name) # | |
HsRule (Located (SourceText, RuleName)) Activation [LRuleBndr name] (Located (HsExpr name)) (PostRn name NameSet) (Located (HsExpr name)) (PostRn name NameSet) |
DataId name => Data (RuleDecl name) # | |
OutputableBndr name => Outputable (RuleDecl name) # | |
RuleBndr (Located name) | |
RuleBndrSig (Located name) (LHsSigWcType name) |
DataId name => Data (RuleBndr name) # | |
OutputableBndr name => Outputable (RuleBndr name) # | |
collectRuleBndrSigTys :: [RuleBndr name] -> [LHsSigWcType name] Source #
flattenRuleDecls :: [LRuleDecls name] -> [LRuleDecl name] Source #
pprFullRuleName :: Located (SourceText, RuleName) -> SDoc Source #
VECTORISE
declarations
HsVect SourceText (Located name) (LHsExpr name) | |
HsNoVect SourceText (Located name) | |
HsVectTypeIn SourceText Bool (Located name) (Maybe (Located name)) | |
HsVectTypeOut Bool TyCon (Maybe TyCon) | |
HsVectClassIn SourceText (Located name) | |
HsVectClassOut Class | |
HsVectInstIn (LHsSigType name) | |
HsVectInstOut ClsInst |
DataId name => Data (VectDecl name) # | |
OutputableBndr name => Outputable (VectDecl name) # | |
lvectDeclName :: NamedThing name => LVectDecl name -> Name Source #
lvectInstDecl :: LVectDecl name -> Bool Source #
default
declarations
data DefaultDecl name Source #
DefaultDecl [LHsType name] |
DataId name => Data (DefaultDecl name) # | |
OutputableBndr name => Outputable (DefaultDecl name) # | |
type LDefaultDecl name = Located (DefaultDecl name) Source #
Template haskell declaration splice
data SpliceDecl id Source #
DataId id => Data (SpliceDecl id) # | |
OutputableBndr name => Outputable (SpliceDecl name) # | |
type LSpliceDecl name = Located (SpliceDecl name) Source #
Foreign function interface declarations
data ForeignDecl name Source #
ForeignImport | |
| |
ForeignExport | |
|
DataId name => Data (ForeignDecl name) # | |
OutputableBndr name => Outputable (ForeignDecl name) # | |
type LForeignDecl name = Located (ForeignDecl name) Source #
data ForeignImport Source #
data ForeignExport Source #
Data-constructor declarations
data T b = forall a. Eq a => MkT a b MkT :: forall b a. Eq a => MkT a b data T b where MkT1 :: Int -> T Int data T = IntMkT
Int | MkT2 data T a where IntMkT
Int :: T Int
ConDeclGADT | |
| |
ConDeclH98 | |
|
DataId name => Data (ConDecl name) # | |
OutputableBndr name => Outputable (ConDecl name) # | |
= Located (ConDecl name) | May have |
type HsConDeclDetails name = HsConDetails (LBangType name) (Located [LConDeclField name]) Source #
hsConDeclArgTys :: HsConDeclDetails name -> [LBangType name] Source #
getConNames :: ConDecl name -> [Located name] Source #
getConDetails :: ConDecl name -> HsConDeclDetails name Source #
gadtDeclDetails :: LHsSigType name -> (HsConDeclDetails name, LHsType name, LHsContext name, [LHsTyVarBndr name]) Source #
Document comments
docDeclDoc :: DocDecl -> HsDocString Source #
Deprecations
Warning [Located name] WarningTxt |
Data name => Data (WarnDecl name) # | |
OutputableBndr name => Outputable (WarnDecl name) # | |
Warnings | |
|
Data name => Data (WarnDecls name) # | |
OutputableBndr name => Outputable (WarnDecls name) # | |
type LWarnDecls name = Located (WarnDecls name) Source #
Annotations
HsAnnotation SourceText (AnnProvenance name) (Located (HsExpr name)) |
DataId name => Data (AnnDecl name) # | |
OutputableBndr name => Outputable (AnnDecl name) # | |
data AnnProvenance name Source #
ValueAnnProvenance (Located name) | |
TypeAnnProvenance (Located name) | |
ModuleAnnProvenance |
Functor AnnProvenance # | |
Foldable AnnProvenance # | |
Traversable AnnProvenance # | |
Data name => Data (AnnProvenance name) # | |
annProvenanceName_maybe :: AnnProvenance name -> Maybe name Source #
Role annotations
data RoleAnnotDecl name Source #
RoleAnnotDecl (Located name) [Located (Maybe Role)] |
Data name => Data (RoleAnnotDecl name) # | |
OutputableBndr name => Outputable (RoleAnnotDecl name) # | |
type LRoleAnnotDecl name = Located (RoleAnnotDecl name) Source #
roleAnnotDeclName :: RoleAnnotDecl name -> name Source #
Injective type families
data FamilyResultSig name Source #
NoSig | |
KindSig (LHsKind name) | |
TyVarSig (LHsTyVarBndr name) |
DataId name => Data (FamilyResultSig name) # | |
type LFamilyResultSig name = Located (FamilyResultSig name) Source #
data InjectivityAnn name Source #
If the user supplied an injectivity annotation it is represented using InjectivityAnn. At the moment this is a single injectivity condition - see Note [Injectivity annotation]. `Located name` stores the LHS of injectivity condition. `[Located name]` stores the RHS of injectivity condition. Example:
type family Foo a b c = r | r -> a c where ...
This will be represented as "InjectivityAnn r
[a
, c
]"
InjectivityAnn (Located name) [Located name] |
Data name => Data (InjectivityAnn name) # | |
type LInjectivityAnn name = Located (InjectivityAnn name) Source #
resultVariableName :: FamilyResultSig a -> Maybe a Source #
Maybe return name of the result type variable
Grouping
HsGroup | |
|
DataId id => Data (HsGroup id) # | |
OutputableBndr name => Outputable (HsGroup name) # | |
emptyRdrGroup :: HsGroup a Source #
emptyRnGroup :: HsGroup a Source #