HsTypes

ghc-7.10.3: The GHC API

Safe Haskell | None
Language | Haskell2010

HsTypes

Synopsis

- data HsType name
  - = HsForAllTy HsExplicitFlag (Maybe SrcSpan) (LHsTyVarBndrs name) (LHsContext name) (LHsType name)
  - | HsTyVar name
  - | HsAppTy (LHsType name) (LHsType name)
  - | HsFunTy (LHsType name) (LHsType name)
  - | HsListTy (LHsType name)
  - | HsPArrTy (LHsType name)
  - | HsTupleTy HsTupleSort [LHsType name]
  - | HsOpTy (LHsType name) (LHsTyOp name) (LHsType name)
  - | HsParTy (LHsType name)
  - | HsIParamTy HsIPName (LHsType name)
  - | HsEqTy (LHsType name) (LHsType name)
  - | HsKindSig (LHsType name) (LHsKind name)
  - | HsQuasiQuoteTy (HsQuasiQuote name)
  - | HsSpliceTy (HsSplice name) (PostTc name Kind)
  - | HsDocTy (LHsType name) LHsDocString
  - | HsBangTy HsSrcBang (LHsType name)
  - | HsRecTy [LConDeclField name]
  - | HsCoreTy Type
  - | HsExplicitListTy (PostTc name Kind) [LHsType name]
  - | HsExplicitTupleTy [PostTc name Kind] [LHsType name]
  - | HsTyLit HsTyLit
  - | HsWrapTy HsTyWrapper (HsType name)
  - | HsWildcardTy
  - | HsNamedWildcardTy name
- type LHsType name = Located (HsType name)
- type HsKind name = HsType name
- type LHsKind name = Located (HsKind name)
- type HsTyOp name = (HsTyWrapper, name)
- type LHsTyOp name = HsTyOp (Located name)
- data HsTyVarBndr name
  - = UserTyVar name
  - | KindedTyVar (Located name) (LHsKind name)
- type LHsTyVarBndr name = Located (HsTyVarBndr name)
- data LHsTyVarBndrs name = HsQTvs {
  - hsq_kvs :: [Name]
  - hsq_tvs :: [LHsTyVarBndr name]
  }
- data HsWithBndrs name thing = HsWB {
  - hswb_cts :: thing
  - hswb_kvs :: PostRn name [Name]
  - hswb_tvs :: PostRn name [Name]
  - hswb_wcs :: PostRn name [Name]
  }
- data HsTupleSort
  - = HsUnboxedTuple
  - | HsBoxedTuple
  - | HsConstraintTuple
  - | HsBoxedOrConstraintTuple
- data HsExplicitFlag
  - = Qualified
  - | Implicit
  - | Explicit
- type HsContext name = [LHsType name]
- type LHsContext name = Located (HsContext name)
- data HsQuasiQuote id = HsQuasiQuote id SrcSpan FastString
- data HsTyWrapper = WpKiApps [Kind]
- data HsTyLit
  - = HsNumTy SourceText Integer
  - | HsStrTy SourceText FastString
- newtype HsIPName = HsIPName FastString
- hsIPNameFS :: HsIPName -> FastString
- type LBangType name = Located (BangType name)
- type BangType name = HsType name
- data HsBang
  - = HsNoBang
  - | HsSrcBang (Maybe SourceText) (Maybe Bool) Bool
  - | HsUnpack (Maybe Coercion)
  - | HsStrict
- type HsSrcBang = HsBang
- type HsImplBang = HsBang
- getBangType :: LHsType a -> LHsType a
- getBangStrictness :: LHsType a -> HsSrcBang
- data ConDeclField name = ConDeclField {
  - cd_fld_names :: [Located name]
  - cd_fld_type :: LBangType name
  - cd_fld_doc :: Maybe LHsDocString
  }
- type LConDeclField name = Located (ConDeclField name)
- pprConDeclFields :: OutputableBndr name => [LConDeclField name] -> SDoc
- mkHsQTvs :: [LHsTyVarBndr RdrName] -> LHsTyVarBndrs RdrName
- hsQTvBndrs :: LHsTyVarBndrs name -> [LHsTyVarBndr name]
- isHsKindedTyVar :: HsTyVarBndr name -> Bool
- hsTvbAllKinded :: LHsTyVarBndrs name -> Bool
- mkExplicitHsForAllTy :: [LHsTyVarBndr RdrName] -> LHsContext RdrName -> LHsType RdrName -> HsType RdrName
- mkImplicitHsForAllTy :: LHsType RdrName -> HsType RdrName
- mkQualifiedHsForAllTy :: LHsContext RdrName -> LHsType RdrName -> HsType RdrName
- mkHsForAllTy :: HsExplicitFlag -> [LHsTyVarBndr RdrName] -> LHsContext RdrName -> LHsType RdrName -> HsType RdrName
- flattenTopLevelLHsForAllTy :: LHsType name -> LHsType name
- flattenTopLevelHsForAllTy :: HsType name -> HsType name
- flattenHsForAllTyKeepAnns :: HsType name -> ([AddAnn], HsType name)
- hsExplicitTvs :: LHsType Name -> [Name]
- hsTyVarName :: HsTyVarBndr name -> name
- mkHsWithBndrs :: thing -> HsWithBndrs RdrName thing
- hsLKiTyVarNames :: LHsTyVarBndrs Name -> [Name]
- hsLTyVarName :: LHsTyVarBndr name -> name
- hsLTyVarNames :: LHsTyVarBndrs name -> [name]
- hsLTyVarLocName :: LHsTyVarBndr name -> Located name
- hsLTyVarLocNames :: LHsTyVarBndrs name -> [Located name]
- splitLHsInstDeclTy_maybe :: LHsType name -> Maybe (LHsTyVarBndrs name, HsContext name, Located name, [LHsType name])
- splitHsClassTy_maybe :: HsType name -> Maybe (name, [LHsType name])
- splitLHsClassTy_maybe :: LHsType name -> Maybe (Located name, [LHsType name])
- splitHsFunType :: LHsType Name -> ([LHsType Name], LHsType Name)
- splitHsAppTys :: LHsType n -> [LHsType n] -> (LHsType n, [LHsType n])
- hsTyGetAppHead_maybe :: LHsType n -> Maybe (n, [LHsType n])
- mkHsAppTys :: OutputableBndr n => LHsType n -> [LHsType n] -> HsType n
- mkHsOpTy :: LHsType name -> Located name -> LHsType name -> HsType name
- isWildcardTy :: HsType a -> Bool
- isNamedWildcardTy :: HsType a -> Bool
- pprParendHsType :: OutputableBndr name => HsType name -> SDoc
- pprHsForAll :: OutputableBndr name => HsExplicitFlag -> LHsTyVarBndrs name -> LHsContext name -> SDoc
- pprHsForAllExtra :: OutputableBndr name => HsExplicitFlag -> Maybe SrcSpan -> LHsTyVarBndrs name -> LHsContext name -> SDoc
- pprHsContext :: OutputableBndr name => HsContext name -> SDoc
- pprHsContextNoArrow :: OutputableBndr name => HsContext name -> SDoc
- pprHsContextMaybe :: OutputableBndr name => HsContext name -> Maybe SDoc

# Documentation

data HsType name

Constructors

HsForAllTy HsExplicitFlag (Maybe SrcSpan) (LHsTyVarBndrs name) (LHsContext name) (LHsType name) | `AnnKeywordId` : `AnnForall`, `AnnDot`,`AnnDarrow`
HsTyVar name | `AnnKeywordId` : None
HsAppTy (LHsType name) (LHsType name) | `AnnKeywordId` : None
HsFunTy (LHsType name) (LHsType name) | `AnnKeywordId` : `AnnRarrow`,
HsListTy (LHsType name) | `AnnKeywordId` : `AnnOpen` `'['`, `AnnClose` `']'`
HsPArrTy (LHsType name) | `AnnKeywordId` : `AnnOpen` `'[:'`, `AnnClose` `':]'`
HsTupleTy HsTupleSort [LHsType name] | `AnnKeywordId` : `AnnOpen` `'(' or '(#'`, `AnnClose` `')' or '#)'`
HsOpTy (LHsType name) (LHsTyOp name) (LHsType name) | `AnnKeywordId` : None
HsParTy (LHsType name) | `AnnKeywordId` : `AnnOpen` `'('`, `AnnClose` `')'`
HsIParamTy HsIPName (LHsType name) |
    (?x :: ty)
`AnnKeywordId` : `AnnDcolon`
HsEqTy (LHsType name) (LHsType name) |
    ty1 ~ ty2
`AnnKeywordId` : `AnnTilde`
HsKindSig (LHsType name) (LHsKind name) |
    (ty :: kind)
`AnnKeywordId` : `AnnOpen` `'('`, `AnnDcolon`,`AnnClose` `')'`
HsQuasiQuoteTy (HsQuasiQuote name) | `AnnKeywordId` : None
HsSpliceTy (HsSplice name) (PostTc name Kind) | `AnnKeywordId` : `AnnOpen` `'$('`, `AnnClose` `')'`
HsDocTy (LHsType name) LHsDocString | `AnnKeywordId` : None
HsBangTy HsSrcBang (LHsType name) | `AnnKeywordId` : `AnnOpen` `'{-# UNPACK' or '{-# NOUNPACK'`, `AnnClose` `'#-}'` `AnnBang` `'!'`
HsRecTy [LConDeclField name] | `AnnKeywordId` : `AnnOpen` `'{'`, `AnnClose` `'}'`
HsCoreTy Type | `AnnKeywordId` : None
HsExplicitListTy (PostTc name Kind) [LHsType name] | `AnnKeywordId` : `AnnOpen` `"'["`, `AnnClose` `']'`
HsExplicitTupleTy [PostTc name Kind] [LHsType name] | `AnnKeywordId` : `AnnOpen` `"'("`, `AnnClose` `')'`
HsTyLit HsTyLit | `AnnKeywordId` : None
HsWrapTy HsTyWrapper (HsType name) | `AnnKeywordId` : None
HsWildcardTy | `AnnKeywordId` : None
HsNamedWildcardTy name | `AnnKeywordId` : None

Instances

DataId name => Data (HsType name) |
OutputableBndr name => Outputable (HsType name) |

type LHsType name

Arguments

= Located (HsType name) | May have `AnnKeywordId` : `AnnComma` when in a list

type HsKind name = HsType name

type LHsKind name

Arguments

= Located (HsKind name) | `AnnKeywordId` : `AnnDcolon`

type HsTyOp name = (HsTyWrapper, name)

type LHsTyOp name = HsTyOp (Located name)

data HsTyVarBndr name

Constructors

UserTyVar name |
KindedTyVar (Located name) (LHsKind name) | `AnnKeywordId` : `AnnOpen`, `AnnDcolon`, `AnnClose`

Instances

DataId name => Data (HsTyVarBndr name) |
OutputableBndr name => Outputable (HsTyVarBndr name) |

type LHsTyVarBndr name = Located (HsTyVarBndr name)

data LHsTyVarBndrs name

Constructors

HsQTvs |
Fields hsq_kvs :: [Name] hsq_tvs :: [LHsTyVarBndr name]

Instances

DataId name => Data (LHsTyVarBndrs name) |
Monoid (LHsTyVarBndrs name) |
OutputableBndr name => Outputable (LHsTyVarBndrs name) |

data HsWithBndrs name thing

Constructors

HsWB |
Fields hswb_cts :: thing hswb_kvs :: PostRn name [Name] hswb_tvs :: PostRn name [Name] hswb_wcs :: PostRn name [Name]

Instances

(Data name, Data thing, Data (PostRn name [Name])) => Data (HsWithBndrs name thing) |
Outputable thing => Outputable (HsWithBndrs name thing) |

data HsTupleSort

Constructors

HsUnboxedTuple |
HsBoxedTuple |
HsConstraintTuple |
HsBoxedOrConstraintTuple |

Instances

Data HsTupleSort |

data HsExplicitFlag

Constructors

Qualified |
Implicit |
Explicit |

Instances

Data HsExplicitFlag |

type HsContext name = [LHsType name]

type LHsContext name

Arguments

= Located (HsContext name) | `AnnKeywordId` : `AnnUnit`

data HsQuasiQuote id

Constructors

HsQuasiQuote id SrcSpan FastString |

Instances

Data id => Data (HsQuasiQuote id) |
OutputableBndr id => Outputable (HsQuasiQuote id) |

data HsTyWrapper

Constructors

WpKiApps [Kind] |

Instances

Data HsTyWrapper |

data HsTyLit

Constructors

HsNumTy SourceText Integer |
HsStrTy SourceText FastString |

Instances

Data HsTyLit |
Outputable HsTyLit |

newtype HsIPName

These names are used early on to store the names of implicit parameters. They completely disappear after type-checking.

Constructors

HsIPName FastString |

Instances

Eq HsIPName |
Data HsIPName |
OutputableBndr HsIPName |
Outputable HsIPName |

hsIPNameFS :: HsIPName -> FastString

type LBangType name = Located (BangType name)

type BangType name = HsType name

data HsBang

Constructors

HsNoBang |
HsSrcBang (Maybe SourceText) (Maybe Bool) Bool |
HsUnpack (Maybe Coercion) |
HsStrict |

Instances

Data HsBang |
Outputable HsBang |

type HsSrcBang = HsBang

type HsImplBang = HsBang

getBangType :: LHsType a -> LHsType a

getBangStrictness :: LHsType a -> HsSrcBang

data ConDeclField name

Constructors

ConDeclField | `AnnKeywordId` : `AnnDcolon`
Fields cd_fld_names :: [Located name] cd_fld_type :: LBangType name cd_fld_doc :: Maybe LHsDocString

Instances

DataId name => Data (ConDeclField name) |

type LConDeclField name

Arguments

= Located (ConDeclField name) | May have `AnnKeywordId` : `AnnComma` when in a list

pprConDeclFields :: OutputableBndr name => [LConDeclField name] -> SDoc

mkHsQTvs :: [LHsTyVarBndr RdrName] -> LHsTyVarBndrs RdrName

hsQTvBndrs :: LHsTyVarBndrs name -> [LHsTyVarBndr name]

isHsKindedTyVar :: HsTyVarBndr name -> Bool

Does this `HsTyVarBndr` come with an explicit kind annotation?

hsTvbAllKinded :: LHsTyVarBndrs name -> Bool

Do all type variables in this `LHsTyVarBndr` come with kind annotations?

mkExplicitHsForAllTy :: [LHsTyVarBndr RdrName] -> LHsContext RdrName -> LHsType RdrName -> HsType RdrName

mkImplicitHsForAllTy :: LHsType RdrName -> HsType RdrName

mkImplicitHsForAllTy is called when we encounter f :: type Wrap around a HsForallTy if one is not there already.

mkQualifiedHsForAllTy :: LHsContext RdrName -> LHsType RdrName -> HsType RdrName

mkHsForAllTy :: HsExplicitFlag -> [LHsTyVarBndr RdrName] -> LHsContext RdrName -> LHsType RdrName -> HsType RdrName

Smart constructor for HsForAllTy, which populates the extra-constraints field if a wildcard is present in the context.

flattenTopLevelLHsForAllTy :: LHsType name -> LHsType name

When a sigtype is parsed, the type found is wrapped in an Implicit HsForAllTy via mkImplicitHsForAllTy, to ensure that a signature always has a forall at the outer level. For Api Annotations this nested structure is important to ensure that all `forall` and `.` locations are retained. From the renamer onwards this structure is flattened, to ease the renaming and type checking process.

flattenTopLevelHsForAllTy :: HsType name -> HsType name

flattenHsForAllTyKeepAnns :: HsType name -> ([AddAnn], HsType name)

hsExplicitTvs :: LHsType Name -> [Name]

hsTyVarName :: HsTyVarBndr name -> name

mkHsWithBndrs :: thing -> HsWithBndrs RdrName thing

hsLKiTyVarNames :: LHsTyVarBndrs Name -> [Name]

hsLTyVarName :: LHsTyVarBndr name -> name

hsLTyVarNames :: LHsTyVarBndrs name -> [name]

hsLTyVarLocName :: LHsTyVarBndr name -> Located name

hsLTyVarLocNames :: LHsTyVarBndrs name -> [Located name]

splitLHsInstDeclTy_maybe :: LHsType name -> Maybe (LHsTyVarBndrs name, HsContext name, Located name, [LHsType name])

splitHsClassTy_maybe :: HsType name -> Maybe (name, [LHsType name])

splitLHsClassTy_maybe :: LHsType name -> Maybe (Located name, [LHsType name])

splitHsFunType :: LHsType Name -> ([LHsType Name], LHsType Name)

splitHsAppTys :: LHsType n -> [LHsType n] -> (LHsType n, [LHsType n])

hsTyGetAppHead_maybe :: LHsType n -> Maybe (n, [LHsType n])

mkHsAppTys :: OutputableBndr n => LHsType n -> [LHsType n] -> HsType n

mkHsOpTy :: LHsType name -> Located name -> LHsType name -> HsType name

isWildcardTy :: HsType a -> Bool

isNamedWildcardTy :: HsType a -> Bool

pprParendHsType :: OutputableBndr name => HsType name -> SDoc

pprHsForAll :: OutputableBndr name => HsExplicitFlag -> LHsTyVarBndrs name -> LHsContext name -> SDoc

pprHsForAllExtra :: OutputableBndr name => HsExplicitFlag -> Maybe SrcSpan -> LHsTyVarBndrs name -> LHsContext name -> SDoc

Version of `pprHsForAll` that can also print an extra-constraints wildcard, e.g. `_ => a -> Bool` or `(Show a, _) => a -> String`. This underscore will be printed when the 'Maybe SrcSpan' argument is a `Just` containing the location of the extra-constraints wildcard. A special function for this is needed, as the extra-constraints wildcard is removed from the actual context and type, and stored in a separate field, thus just printing the type will not print the extra-constraints wildcard.

pprHsContext :: OutputableBndr name => HsContext name -> SDoc

pprHsContextNoArrow :: OutputableBndr name => HsContext name -> SDoc

pprHsContextMaybe :: OutputableBndr name => HsContext name -> Maybe SDoc