Safe Haskell | None |
---|---|
Language | Haskell2010 |
- data DataCon
- data DataConRep
- = NoDataConRep
- | DCR {
- dcr_wrap_id :: Id
- dcr_boxer :: DataConBoxer
- dcr_arg_tys :: [Type]
- dcr_stricts :: [StrictnessMark]
- dcr_bangs :: [HsImplBang]
- data SrcStrictness
- data SrcUnpackedness
- data HsSrcBang = HsSrcBang SourceText SrcUnpackedness SrcStrictness
- data HsImplBang
- data StrictnessMark
- type ConTag = Int
- data EqSpec
- mkEqSpec :: TyVar -> Type -> EqSpec
- eqSpecTyVar :: EqSpec -> TyVar
- eqSpecType :: EqSpec -> Type
- eqSpecPair :: EqSpec -> (TyVar, Type)
- eqSpecPreds :: [EqSpec] -> ThetaType
- substEqSpec :: TCvSubst -> EqSpec -> EqSpec
- filterEqSpec :: [EqSpec] -> [TyVarBinder] -> [TyVarBinder]
- data FieldLbl a = FieldLabel {
- flLabel :: FieldLabelString
- flIsOverloaded :: Bool
- flSelector :: a
- type FieldLabel = FieldLbl Name
- type FieldLabelString = FastString
- mkDataCon :: Name -> Bool -> TyConRepName -> [HsSrcBang] -> [FieldLabel] -> [TyVarBinder] -> [TyVarBinder] -> [EqSpec] -> ThetaType -> [Type] -> Type -> RuntimeRepInfo -> TyCon -> ThetaType -> Id -> DataConRep -> DataCon
- buildAlgTyCon :: Name -> [TyVar] -> [Role] -> Maybe CType -> ThetaType -> AlgTyConRhs -> Bool -> AlgTyConFlav -> TyCon
- buildSynTyCon :: Name -> [TyConBinder] -> Kind -> [Role] -> Type -> TyCon
- fIRST_TAG :: ConTag
- dataConRepType :: DataCon -> Type
- dataConSig :: DataCon -> ([TyVar], ThetaType, [Type], Type)
- dataConInstSig :: DataCon -> [Type] -> ([TyVar], ThetaType, [Type])
- dataConFullSig :: DataCon -> ([TyVar], [TyVar], [EqSpec], ThetaType, [Type], Type)
- dataConName :: DataCon -> Name
- dataConIdentity :: DataCon -> [Word8]
- dataConTag :: DataCon -> ConTag
- dataConTyCon :: DataCon -> TyCon
- dataConOrigTyCon :: DataCon -> TyCon
- dataConUserType :: DataCon -> Type
- dataConUnivTyVars :: DataCon -> [TyVar]
- dataConUnivTyVarBinders :: DataCon -> [TyVarBinder]
- dataConExTyVars :: DataCon -> [TyVar]
- dataConExTyVarBinders :: DataCon -> [TyVarBinder]
- dataConAllTyVars :: DataCon -> [TyVar]
- dataConEqSpec :: DataCon -> [EqSpec]
- dataConTheta :: DataCon -> ThetaType
- dataConStupidTheta :: DataCon -> ThetaType
- dataConInstArgTys :: DataCon -> [Type] -> [Type]
- dataConOrigArgTys :: DataCon -> [Type]
- dataConOrigResTy :: DataCon -> Type
- dataConInstOrigArgTys :: DataCon -> [Type] -> [Type]
- dataConRepArgTys :: DataCon -> [Type]
- dataConFieldLabels :: DataCon -> [FieldLabel]
- dataConFieldType :: DataCon -> FieldLabelString -> Type
- dataConFieldType_maybe :: DataCon -> FieldLabelString -> Maybe (FieldLabel, Type)
- dataConSrcBangs :: DataCon -> [HsSrcBang]
- dataConSourceArity :: DataCon -> Arity
- dataConRepArity :: DataCon -> Arity
- dataConIsInfix :: DataCon -> Bool
- dataConWorkId :: DataCon -> Id
- dataConWrapId :: DataCon -> Id
- dataConWrapId_maybe :: DataCon -> Maybe Id
- dataConImplicitTyThings :: DataCon -> [TyThing]
- dataConRepStrictness :: DataCon -> [StrictnessMark]
- dataConImplBangs :: DataCon -> [HsImplBang]
- dataConBoxer :: DataCon -> Maybe DataConBoxer
- splitDataProductType_maybe :: Type -> Maybe (TyCon, [Type], DataCon, [Type])
- isNullarySrcDataCon :: DataCon -> Bool
- isNullaryRepDataCon :: DataCon -> Bool
- isTupleDataCon :: DataCon -> Bool
- isUnboxedTupleCon :: DataCon -> Bool
- isUnboxedSumCon :: DataCon -> Bool
- isVanillaDataCon :: DataCon -> Bool
- classDataCon :: Class -> DataCon
- dataConCannotMatch :: [Type] -> DataCon -> Bool
- isBanged :: HsImplBang -> Bool
- isMarkedStrict :: StrictnessMark -> Bool
- eqHsBang :: HsImplBang -> HsImplBang -> Bool
- isSrcStrict :: SrcStrictness -> Bool
- isSrcUnpacked :: SrcUnpackedness -> Bool
- specialPromotedDc :: DataCon -> Bool
- isLegacyPromotableDataCon :: DataCon -> Bool
- isLegacyPromotableTyCon :: TyCon -> Bool
- promoteDataCon :: DataCon -> TyCon
Main data types
A data constructor
data DataConRep Source #
Data Constructor Representation
NoDataConRep | |
DCR | |
|
data SrcStrictness Source #
Source Strictness
What strictness annotation the user wrote
SrcLazy | Lazy, ie '~' |
SrcStrict | Strict, ie |
NoSrcStrict | no strictness annotation |
data SrcUnpackedness Source #
Source Unpackedness
What unpackedness the user requested
SrcUnpack | |
SrcNoUnpack | |
NoSrcUnpack | no unpack pragma |
Haskell Source Bang
Bangs on data constructor arguments as the user wrote them in the source code.
(HsSrcBang _ SrcUnpack SrcLazy)
and
(HsSrcBang _ SrcUnpack NoSrcStrict)
(without StrictData) makes no sense, we
emit a warning (in checkValidDataCon) and treat it like
(HsSrcBang _ NoSrcUnpack SrcLazy)
data HsImplBang Source #
Haskell Implementation Bang
Bangs of data constructor arguments as generated by the compiler after consulting HsSrcBang, flags, etc.
Constructor Tag
Type of the tags associated with each constructor possibility or superclass selector
Equality specs
An EqSpec
is a tyvar/type pair representing an equality made in
rejigging a GADT constructor
eqSpecTyVar :: EqSpec -> TyVar Source #
eqSpecType :: EqSpec -> Type Source #
eqSpecPreds :: [EqSpec] -> ThetaType Source #
substEqSpec :: TCvSubst -> EqSpec -> EqSpec Source #
Substitute in an EqSpec
. Precondition: if the LHS of the EqSpec
is mapped in the substitution, it is mapped to a type variable, not
a full type.
filterEqSpec :: [EqSpec] -> [TyVarBinder] -> [TyVarBinder] Source #
Filter out any TyBinders mentioned in an EqSpec
Field labels
Fields in an algebraic record type
FieldLabel | |
|
type FieldLabel = FieldLbl Name Source #
type FieldLabelString = FastString Source #
Field labels are just represented as strings; they are not necessarily unique (even within a module)
Type construction
:: Name | |
-> Bool | Is the constructor declared infix? |
-> TyConRepName | TyConRepName for the promoted TyCon |
-> [HsSrcBang] | Strictness/unpack annotations, from user |
-> [FieldLabel] | Field labels for the constructor, if it is a record, otherwise empty |
-> [TyVarBinder] | Universals. See Note [TyVarBinders in DataCons] |
-> [TyVarBinder] | Existentials. (These last two must be Named and Inferred/Specified) |
-> [EqSpec] | GADT equalities |
-> ThetaType | Theta-type occuring before the arguments proper |
-> [Type] | Original argument types |
-> Type | Original result type |
-> RuntimeRepInfo | See comments on |
-> TyCon | Representation type constructor |
-> ThetaType | The "stupid theta", context of the data
declaration e.g. |
-> Id | Worker Id |
-> DataConRep | Representation |
-> DataCon |
Build a new data constructor
Tags are allocated from here for real constructors or for superclass selectors
Type deconstruction
dataConRepType :: DataCon -> Type Source #
The representation type of the data constructor, i.e. the sort type that will represent values of this type at runtime
dataConSig :: DataCon -> ([TyVar], ThetaType, [Type], Type) Source #
The "signature" of the DataCon
returns, in order:
1) The result of dataConAllTyVars
,
2) All the ThetaType
s relating to the DataCon
(coercion, dictionary, implicit
parameter - whatever)
3) The type arguments to the constructor
4) The original result type of the DataCon
dataConInstSig :: DataCon -> [Type] -> ([TyVar], ThetaType, [Type]) Source #
Instantantiate the universal tyvars of a data con, returning the instantiated existentials, constraints, and args
dataConFullSig :: DataCon -> ([TyVar], [TyVar], [EqSpec], ThetaType, [Type], Type) Source #
The "full signature" of the DataCon
returns, in order:
1) The result of dataConUnivTyVars
2) The result of dataConExTyVars
3) The GADT equalities
4) The result of dataConDictTheta
5) The original argument types to the DataCon
(i.e. before
any change of the representation of the type)
6) The original result type of the DataCon
dataConName :: DataCon -> Name Source #
dataConIdentity :: DataCon -> [Word8] Source #
The string package:module.name
identifying a constructor, which is attached
to its info table and used by the GHCi debugger and the heap profiler
dataConTyCon :: DataCon -> TyCon Source #
The type constructor that we are building via this data constructor
dataConOrigTyCon :: DataCon -> TyCon Source #
The original type constructor used in the definition of this data constructor. In case of a data family instance, that will be the family type constructor.
dataConUserType :: DataCon -> Type Source #
The user-declared type of the data constructor in the nice-to-read form:
T :: forall a b. a -> b -> T [a]
rather than:
T :: forall a c. forall b. (c~[a]) => a -> b -> T c
NB: If the constructor is part of a data instance, the result type mentions the family tycon, not the internal one.
dataConUnivTyVars :: DataCon -> [TyVar] Source #
The universally-quantified type variables of the constructor
dataConUnivTyVarBinders :: DataCon -> [TyVarBinder] Source #
TyBinder
s for the universally-quantified type variables
dataConExTyVars :: DataCon -> [TyVar] Source #
The existentially-quantified type variables of the constructor
dataConExTyVarBinders :: DataCon -> [TyVarBinder] Source #
TyBinder
s for the existentially-quantified type variables
dataConAllTyVars :: DataCon -> [TyVar] Source #
Both the universal and existentiatial type variables of the constructor
dataConEqSpec :: DataCon -> [EqSpec] Source #
Equalities derived from the result type of the data constructor, as written by the programmer in any GADT declaration. This includes *all* GADT-like equalities, including those written in by hand by the programmer.
dataConTheta :: DataCon -> ThetaType Source #
The *full* constraints on the constructor type.
dataConStupidTheta :: DataCon -> ThetaType Source #
The "stupid theta" of the DataCon
, such as data Eq a
in:
data Eq a => T a = ...
:: DataCon | A datacon with no existentials or equality constraints However, it can have a dcTheta (notably it can be a class dictionary, with superclasses) |
-> [Type] | Instantiated at these types |
-> [Type] |
Finds the instantiated types of the arguments required to construct a DataCon
representation
NB: these INCLUDE any dictionary args
but EXCLUDE the data-declaration context, which is discarded
It's all post-flattening etc; this is a representation type
dataConOrigArgTys :: DataCon -> [Type] Source #
Returns the argument types of the wrapper, excluding all dictionary arguments and without substituting for any type variables
dataConOrigResTy :: DataCon -> Type Source #
dataConInstOrigArgTys :: DataCon -> [Type] -> [Type] Source #
Returns just the instantiated value argument types of a DataCon
,
(excluding dictionary args)
dataConRepArgTys :: DataCon -> [Type] Source #
Returns the arg types of the worker, including *all* evidence, after any flattening has been done and without substituting for any type variables
dataConFieldLabels :: DataCon -> [FieldLabel] Source #
The labels for the fields of this particular DataCon
dataConFieldType :: DataCon -> FieldLabelString -> Type Source #
Extract the type for any given labelled field of the DataCon
dataConFieldType_maybe :: DataCon -> FieldLabelString -> Maybe (FieldLabel, Type) Source #
dataConSrcBangs :: DataCon -> [HsSrcBang] Source #
Strictness/unpack annotations, from user; or, for imported
DataCons, from the interface file
The list is in one-to-one correspondence with the arity of the DataCon
dataConSourceArity :: DataCon -> Arity Source #
Source-level arity of the data constructor
dataConRepArity :: DataCon -> Arity Source #
Gives the number of actual fields in the representation of the data constructor. This may be more than appear in the source code; the extra ones are the existentially quantified dictionaries
dataConWorkId :: DataCon -> Id Source #
dataConWrapId :: DataCon -> Id Source #
Returns an Id which looks like the Haskell-source constructor by using
the wrapper if it exists (see dataConWrapId_maybe
) and failing over to
the worker (see dataConWorkId
)
dataConWrapId_maybe :: DataCon -> Maybe Id Source #
Get the Id of the DataCon
wrapper: a function that wraps the "actual"
constructor so it has the type visible in the source program: c.f. dataConWorkId
.
Returns Nothing if there is no wrapper, which occurs for an algebraic data constructor
and also for a newtype (whose constructor is inlined compulsorily)
dataConImplicitTyThings :: DataCon -> [TyThing] Source #
Find all the Id
s implicitly brought into scope by the data constructor. Currently,
the union of the dataConWorkId
and the dataConWrapId
dataConRepStrictness :: DataCon -> [StrictnessMark] Source #
Give the demands on the arguments of a Core constructor application (Con dc args)
dataConImplBangs :: DataCon -> [HsImplBang] Source #
dataConBoxer :: DataCon -> Maybe DataConBoxer Source #
splitDataProductType_maybe Source #
Extract the type constructor, type argument, data constructor and it's representation argument types from a type if it is a product type.
Precisely, we return Just
for any type that is all of:
- Concrete (i.e. constructors visible)
- Single-constructor
- Not existentially quantified
Whether the type is a data
type or a newtype
Predicates on DataCons
isNullarySrcDataCon :: DataCon -> Bool Source #
Return whether there are any argument types for this DataCon
s original source type
See Note [DataCon arities]
isNullaryRepDataCon :: DataCon -> Bool Source #
Return whether there are any argument types for this DataCon
s runtime representation type
See Note [DataCon arities]
isTupleDataCon :: DataCon -> Bool Source #
isUnboxedTupleCon :: DataCon -> Bool Source #
isUnboxedSumCon :: DataCon -> Bool Source #
isVanillaDataCon :: DataCon -> Bool Source #
Vanilla DataCon
s are those that are nice boring Haskell 98 constructors
classDataCon :: Class -> DataCon Source #
isBanged :: HsImplBang -> Bool Source #
isMarkedStrict :: StrictnessMark -> Bool Source #
eqHsBang :: HsImplBang -> HsImplBang -> Bool Source #
Compare strictness annotations
isSrcStrict :: SrcStrictness -> Bool Source #
isSrcUnpacked :: SrcUnpackedness -> Bool Source #
specialPromotedDc :: DataCon -> Bool Source #
Should this DataCon be allowed in a type even without -XDataKinds? Currently, only Lifted & Unlifted
isLegacyPromotableDataCon :: DataCon -> Bool Source #
Was this datacon promotable before GHC 8.0? That is, is it promotable without -XTypeInType
isLegacyPromotableTyCon :: TyCon -> Bool Source #
Was this tycon promotable before GHC 8.0? That is, is it promotable without -XTypeInType
Promotion related functions
promoteDataCon :: DataCon -> TyCon Source #