| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
HsDecls
Contents
- Toplevel declarations
- Class or type declarations
- Instance declarations
- Standalone deriving declarations
RULEdeclarationsVECTORISEdeclarationsdefaultdeclarations- Template haskell declaration splice
- Foreign function interface declarations
- Data-constructor declarations
- Document comments
- Deprecations
- Annotations
- Role annotations
- Injective type families
- Grouping
Description
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
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 (WarnDecls id) | |
| AnnD (AnnDecl id) | |
| RuleD (RuleDecls id) | |
| VectD (VectDecl id) | |
| SpliceD (SpliceDecl id) | |
| DocD DocDecl | |
| RoleAnnotD (RoleAnnotDecl id) |
Instances
| DataId id => Data (HsDecl id) # | |
| OutputableBndr name => Outputable (HsDecl name) # | |
data HsDataDefn name Source #
Constructors
| HsDataDefn | Declares a data type or newtype, giving its constructors
|
Fields
| |
Instances
| DataId id => Data (HsDataDefn id) # | |
| OutputableBndr name => Outputable (HsDataDefn name) # | |
type HsDeriving name Source #
Arguments
| = 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.
Constructors
| FamDecl | type/data family T :: *->* |
Fields
| |
| SynDecl |
|
| DataDecl |
|
Fields
| |
| ClassDecl | |
Fields
| |
Instances
| DataId id => Data (TyClDecl id) # | |
| OutputableBndr name => Outputable (TyClDecl name) # | |
Constructors
| TyClGroup | |
Fields
| |
Instances
| 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]
Arguments
| :: 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 #
Constructors
| FamilyDecl | |
Fields
| |
Instances
| DataId id => Data (FamilyDecl id) # | |
| OutputableBndr name => Outputable (FamilyDecl name) # | |
type LFamilyDecl name = Located (FamilyDecl name) Source #
Instance declarations
Constructors
| ClsInstD | |
Fields
| |
| DataFamInstD | |
Fields
| |
| TyFamInstD | |
Fields
| |
Instances
| DataId id => Data (InstDecl id) # | |
| OutputableBndr name => Outputable (InstDecl name) # | |
data FamilyInfo name Source #
Constructors
| DataFamily | |
| OpenTypeFamily | |
| ClosedTypeFamily (Maybe [LTyFamInstEqn name]) |
|
Instances
| DataId name => Data (FamilyInfo name) # | |
| Outputable (FamilyInfo name) # | |
data TyFamInstDecl name Source #
Constructors
| TyFamInstDecl | |
Fields
| |
Instances
| 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 #
Constructors
| DataFamInstDecl | |
Fields
| |
Instances
| 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]
Constructors
| TyFamEqn | |
type TyFamInstEqn name = TyFamEqn name (HsTyPats name) Source #
type LTyFamInstEqn name Source #
Arguments
| = Located (TyFamInstEqn name) | May have |
type TyFamDefltEqn name = TyFamEqn name (LHsQTyVars name) Source #
type LTyFamDefltEqn name = Located (TyFamDefltEqn name) Source #
Arguments
| = 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 #
Constructors
| ClsInstDecl | |
Fields
| |
Instances
| DataId id => Data (ClsInstDecl id) # | |
| OutputableBndr name => Outputable (ClsInstDecl name) # | |
Standalone deriving declarations
Constructors
| DerivDecl | |
Fields
| |
Instances
| 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 #
Constructors
| HsRules | |
Fields
| |
Instances
| DataId name => Data (RuleDecls name) # | |
| OutputableBndr name => Outputable (RuleDecls name) # | |
Constructors
| HsRule (Located (SourceText, RuleName)) Activation [LRuleBndr name] (Located (HsExpr name)) (PostRn name NameSet) (Located (HsExpr name)) (PostRn name NameSet) |
Instances
| DataId name => Data (RuleDecl name) # | |
| OutputableBndr name => Outputable (RuleDecl name) # | |
Constructors
| RuleBndr (Located name) | |
| RuleBndrSig (Located name) (LHsSigWcType name) |
Instances
| 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
Constructors
| 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 |
Instances
| 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 #
Constructors
| DefaultDecl [LHsType name] |
Instances
| 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 #
Constructors
| SpliceDecl (Located (HsSplice id)) SpliceExplicitFlag |
Instances
| 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 #
Constructors
| ForeignImport | |
Fields
| |
| ForeignExport | |
Fields
| |
Instances
| DataId name => Data (ForeignDecl name) # | |
| OutputableBndr name => Outputable (ForeignDecl name) # | |
type LForeignDecl name = Located (ForeignDecl name) Source #
data ForeignImport Source #
Constructors
| CImport (Located CCallConv) (Located Safety) (Maybe Header) CImportSpec (Located SourceText) |
Instances
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 = Int MkT Int
| MkT2
data T a where
Int MkT Int :: T Int
Constructors
| ConDeclGADT | |
Fields
| |
| ConDeclH98 | |
Fields
| |
Instances
| DataId name => Data (ConDecl name) # | |
| OutputableBndr name => Outputable (ConDecl name) # | |
Arguments
| = 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
Constructors
| Warning [Located name] WarningTxt |
Instances
| Data name => Data (WarnDecl name) # | |
| OutputableBndr name => Outputable (WarnDecl name) # | |
Constructors
| Warnings | |
Fields
| |
Instances
| Data name => Data (WarnDecls name) # | |
| OutputableBndr name => Outputable (WarnDecls name) # | |
type LWarnDecls name = Located (WarnDecls name) Source #
Annotations
Constructors
| HsAnnotation SourceText (AnnProvenance name) (Located (HsExpr name)) |
Instances
| DataId name => Data (AnnDecl name) # | |
| OutputableBndr name => Outputable (AnnDecl name) # | |
data AnnProvenance name Source #
Constructors
| ValueAnnProvenance (Located name) | |
| TypeAnnProvenance (Located name) | |
| ModuleAnnProvenance |
Instances
| Functor AnnProvenance # | |
| Foldable AnnProvenance # | |
| Traversable AnnProvenance # | |
| Data name => Data (AnnProvenance name) # | |
annProvenanceName_maybe :: AnnProvenance name -> Maybe name Source #
Role annotations
data RoleAnnotDecl name Source #
Constructors
| RoleAnnotDecl (Located name) [Located (Maybe Role)] |
Instances
| 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 #
Constructors
| NoSig | |
| KindSig (LHsKind name) | |
| TyVarSig (LHsTyVarBndr name) |
Instances
| 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]"
Constructors
| InjectivityAnn (Located name) [Located name] |
Instances
| 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
Constructors
| HsGroup | |
Fields
| |
Instances
| DataId id => Data (HsGroup id) # | |
| OutputableBndr name => Outputable (HsGroup name) # | |
emptyRdrGroup :: HsGroup a Source #
emptyRnGroup :: HsGroup a Source #