Note [Representing type signatures]
HsSigType is used to represent an explicit user type signature. These are
used in a variety of places. Some examples include:
* Type signatures (e.g., f :: a -> a)
* Standalone kind signatures (e.g., type G :: a -> a)
* GADT constructor types (e.g., data T where MkT :: a -> T)
A HsSigType is the combination of an HsOuterSigTyVarBndrs and an LHsType:
* The HsOuterSigTyVarBndrs binds the /explicitly/ quantified type variables
when the type signature has an outermost, user-written 'forall' (i.e,
the HsOuterExplicit constructor is used). If there is no outermost 'forall',
then it binds the /implicitly/ quantified type variables instead (i.e.,
the HsOuterImplicit constructor is used).
* The LHsType represents the rest of the type.
E.g. For a signature like
f :: forall k (a::k). blah
we get
HsSig { sig_bndrs = HsOuterExplicit { hso_bndrs = [k, (a :: k)] }
, sig_body = blah } References 0
This Note does not link to any other.
Referenced by 3
- Language.Haskell.Syntax.Decls call site
- HsType binders Language.Haskell.Syntax.Type
- Language.Haskell.Syntax.Type call site