ghc-8.2.2: The GHC API

Safe Haskell | None
Language | Haskell2010

HsUtils

Contents

- Constructing general big tuples

Synopsis

- mkHsPar :: LHsExpr id -> LHsExpr id
- mkHsApp :: LHsExpr name -> LHsExpr name -> LHsExpr name
- mkHsAppType :: LHsExpr name -> LHsWcType name -> LHsExpr name
- mkHsAppTypeOut :: LHsExpr Id -> LHsWcType Name -> LHsExpr Id
- mkHsCaseAlt :: LPat id -> Located (body id) -> LMatch id (Located (body id))
- mkSimpleMatch :: HsMatchContext (NameOrRdrName id) -> [LPat id] -> Located (body id) -> LMatch id (Located (body id))
- unguardedGRHSs :: Located (body id) -> GRHSs id (Located (body id))
- unguardedRHS :: SrcSpan -> Located (body id) -> [LGRHS id (Located (body id))]
- mkMatchGroup :: PostTc name Type ~ PlaceHolder => Origin -> [LMatch name (Located (body name))] -> MatchGroup name (Located (body name))
- mkMatch :: HsMatchContext (NameOrRdrName id) -> [LPat id] -> LHsExpr id -> Located (HsLocalBinds id) -> LMatch id (LHsExpr id)
- mkPrefixFunRhs :: Located id -> HsMatchContext id
- mkHsLam :: [LPat RdrName] -> LHsExpr RdrName -> LHsExpr RdrName
- mkHsIf :: LHsExpr id -> LHsExpr id -> LHsExpr id -> HsExpr id
- mkHsWrap :: HsWrapper -> HsExpr id -> HsExpr id
- mkLHsWrap :: HsWrapper -> LHsExpr id -> LHsExpr id
- mkHsWrapCo :: TcCoercionN -> HsExpr id -> HsExpr id
- mkHsWrapCoR :: TcCoercionR -> HsExpr id -> HsExpr id
- mkLHsWrapCo :: TcCoercionN -> LHsExpr id -> LHsExpr id
- mkHsDictLet :: TcEvBinds -> LHsExpr Id -> LHsExpr Id
- mkHsLams :: [TyVar] -> [EvVar] -> LHsExpr Id -> LHsExpr Id
- mkHsOpApp :: LHsExpr id -> id -> LHsExpr id -> HsExpr id
- mkHsDo :: HsStmtContext Name -> [ExprLStmt RdrName] -> HsExpr RdrName
- mkHsComp :: HsStmtContext Name -> [ExprLStmt RdrName] -> LHsExpr RdrName -> HsExpr RdrName
- mkHsWrapPat :: HsWrapper -> Pat id -> Type -> Pat id
- mkHsWrapPatCo :: TcCoercionN -> Pat id -> Type -> Pat id
- mkLHsPar :: LHsExpr name -> LHsExpr name
- mkHsCmdWrap :: HsWrapper -> HsCmd id -> HsCmd id
- mkLHsCmdWrap :: HsWrapper -> LHsCmd id -> LHsCmd id
- nlHsTyApp :: name -> [Type] -> LHsExpr name
- nlHsTyApps :: name -> [Type] -> [LHsExpr name] -> LHsExpr name
- nlHsVar :: id -> LHsExpr id
- nlHsDataCon :: DataCon -> LHsExpr Id
- nlHsLit :: HsLit -> LHsExpr id
- nlHsApp :: LHsExpr id -> LHsExpr id -> LHsExpr id
- nlHsApps :: id -> [LHsExpr id] -> LHsExpr id
- nlHsSyntaxApps :: SyntaxExpr id -> [LHsExpr id] -> LHsExpr id
- nlHsIntLit :: Integer -> LHsExpr id
- nlHsVarApps :: id -> [id] -> LHsExpr id
- nlHsDo :: HsStmtContext Name -> [LStmt RdrName (LHsExpr RdrName)] -> LHsExpr RdrName
- nlHsOpApp :: LHsExpr id -> id -> LHsExpr id -> LHsExpr id
- nlHsLam :: LMatch RdrName (LHsExpr RdrName) -> LHsExpr RdrName
- nlHsPar :: LHsExpr id -> LHsExpr id
- nlHsIf :: LHsExpr id -> LHsExpr id -> LHsExpr id -> LHsExpr id
- nlHsCase :: LHsExpr RdrName -> [LMatch RdrName (LHsExpr RdrName)] -> LHsExpr RdrName
- nlList :: [LHsExpr RdrName] -> LHsExpr RdrName
- mkLHsTupleExpr :: [LHsExpr a] -> LHsExpr a
- mkLHsVarTuple :: [a] -> LHsExpr a
- missingTupArg :: HsTupArg RdrName
- typeToLHsType :: Type -> LHsType RdrName
- mkChunkified :: ([a] -> a) -> [a] -> a
- chunkify :: [a] -> [[a]]
- mkFunBind :: Located RdrName -> [LMatch RdrName (LHsExpr RdrName)] -> HsBind RdrName
- mkVarBind :: id -> LHsExpr id -> LHsBind id
- mkHsVarBind :: SrcSpan -> RdrName -> LHsExpr RdrName -> LHsBind RdrName
- mk_easy_FunBind :: SrcSpan -> RdrName -> [LPat RdrName] -> LHsExpr RdrName -> LHsBind RdrName
- mkTopFunBind :: Origin -> Located Name -> [LMatch Name (LHsExpr Name)] -> HsBind Name
- mkPatSynBind :: Located RdrName -> HsPatSynDetails (Located RdrName) -> LPat RdrName -> HsPatSynDir RdrName -> HsBind RdrName
- isInfixFunBind :: HsBindLR id1 id2 -> Bool
- mkHsIntegral :: SourceText -> Integer -> PostTc RdrName Type -> HsOverLit RdrName
- mkHsFractional :: FractionalLit -> PostTc RdrName Type -> HsOverLit RdrName
- mkHsIsString :: SourceText -> FastString -> PostTc RdrName Type -> HsOverLit RdrName
- mkHsString :: String -> HsLit
- mkHsStringPrimLit :: FastString -> HsLit
- mkNPat :: Located (HsOverLit RdrName) -> Maybe (SyntaxExpr RdrName) -> Pat RdrName
- mkNPlusKPat :: Located RdrName -> Located (HsOverLit RdrName) -> Pat RdrName
- nlVarPat :: id -> LPat id
- nlLitPat :: HsLit -> LPat id
- nlConVarPat :: RdrName -> [RdrName] -> LPat RdrName
- nlConVarPatName :: Name -> [Name] -> LPat Name
- nlConPat :: RdrName -> [LPat RdrName] -> LPat RdrName
- nlConPatName :: Name -> [LPat Name] -> LPat Name
- nlInfixConPat :: id -> LPat id -> LPat id -> LPat id
- nlNullaryConPat :: id -> LPat id
- nlWildConPat :: DataCon -> LPat RdrName
- nlWildPat :: LPat RdrName
- nlWildPatName :: LPat Name
- nlWildPatId :: LPat Id
- nlTuplePat :: [LPat id] -> Boxity -> LPat id
- mkParPat :: LPat name -> LPat name
- nlParPat :: LPat name -> LPat name
- mkBigLHsVarTup :: [id] -> LHsExpr id
- mkBigLHsTup :: [LHsExpr id] -> LHsExpr id
- mkBigLHsVarPatTup :: [id] -> LPat id
- mkBigLHsPatTup :: [LPat id] -> LPat id
- mkHsAppTy :: LHsType name -> LHsType name -> LHsType name
- mkHsAppTys :: LHsType name -> [LHsType name] -> LHsType name
- userHsTyVarBndrs :: SrcSpan -> [name] -> [LHsTyVarBndr name]
- userHsLTyVarBndrs :: SrcSpan -> [Located name] -> [LHsTyVarBndr name]
- mkLHsSigType :: LHsType RdrName -> LHsSigType RdrName
- mkLHsSigWcType :: LHsType RdrName -> LHsSigWcType RdrName
- mkClassOpSigs :: [LSig RdrName] -> [LSig RdrName]
- mkHsSigEnv :: forall a. (LSig Name -> Maybe ([Located Name], a)) -> [LSig Name] -> NameEnv a
- nlHsAppTy :: LHsType name -> LHsType name -> LHsType name
- nlHsTyVar :: name -> LHsType name
- nlHsFunTy :: LHsType name -> LHsType name -> LHsType name
- nlHsParTy :: LHsType name -> LHsType name
- nlHsTyConApp :: name -> [LHsType name] -> LHsType name
- mkTransformStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL)
- mkTransformByStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL)
- mkBodyStmt :: Located (bodyR RdrName) -> StmtLR idL RdrName (Located (bodyR RdrName))
- mkBindStmt :: PostTc idR Type ~ PlaceHolder => LPat idL -> Located (bodyR idR) -> StmtLR idL idR (Located (bodyR idR))
- mkTcBindStmt :: LPat Id -> Located (bodyR Id) -> StmtLR Id Id (Located (bodyR Id))
- mkLastStmt :: Located (bodyR idR) -> StmtLR idL idR (Located (bodyR idR))
- emptyTransStmt :: PostTc idR Type ~ PlaceHolder => StmtLR idL idR (LHsExpr idR)
- mkGroupUsingStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL)
- mkGroupByUsingStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL)
- emptyRecStmt :: StmtLR idL RdrName bodyR
- emptyRecStmtName :: StmtLR Name Name bodyR
- emptyRecStmtId :: StmtLR Id Id bodyR
- mkRecStmt :: [LStmtLR idL RdrName bodyR] -> StmtLR idL RdrName bodyR
- mkHsSpliceTy :: SpliceDecoration -> LHsExpr RdrName -> HsType RdrName
- mkHsSpliceE :: SpliceDecoration -> LHsExpr RdrName -> HsExpr RdrName
- mkHsSpliceTE :: SpliceDecoration -> LHsExpr RdrName -> HsExpr RdrName
- mkUntypedSplice :: SpliceDecoration -> LHsExpr RdrName -> HsSplice RdrName
- mkHsQuasiQuote :: RdrName -> SrcSpan -> FastString -> HsSplice RdrName
- unqualQuasiQuote :: RdrName
- noRebindableInfo :: PlaceHolder
- isUnliftedHsBind :: HsBind Id -> Bool
- isBangedBind :: HsBind Id -> Bool
- collectLocalBinders :: HsLocalBindsLR idL idR -> [idL]
- collectHsValBinders :: HsValBindsLR idL idR -> [idL]
- collectHsBindListBinders :: [LHsBindLR idL idR] -> [idL]
- collectHsIdBinders :: HsValBindsLR idL idR -> [idL]
- collectHsBindsBinders :: LHsBindsLR idL idR -> [idL]
- collectHsBindBinders :: HsBindLR idL idR -> [idL]
- collectMethodBinders :: LHsBindsLR RdrName idR -> [Located RdrName]
- collectPatBinders :: LPat a -> [a]
- collectPatsBinders :: [LPat a] -> [a]
- collectLStmtsBinders :: [LStmtLR idL idR body] -> [idL]
- collectStmtsBinders :: [StmtLR idL idR body] -> [idL]
- collectLStmtBinders :: LStmtLR idL idR body -> [idL]
- collectStmtBinders :: StmtLR idL idR body -> [idL]
- hsLTyClDeclBinders :: Located (TyClDecl name) -> ([Located name], [LFieldOcc name])
- hsTyClForeignBinders :: [TyClGroup Name] -> [LForeignDecl Name] -> [Name]
- hsPatSynSelectors :: HsValBinds id -> [id]
- getPatSynBinds :: [(RecFlag, LHsBinds id)] -> [PatSynBind id id]
- hsForeignDeclsBinders :: [LForeignDecl name] -> [Located name]
- hsGroupBinders :: HsGroup Name -> [Name]
- hsDataFamInstBinders :: DataFamInstDecl name -> ([Located name], [LFieldOcc name])
- hsDataDefnBinders :: HsDataDefn name -> ([Located name], [LFieldOcc name])
- lStmtsImplicits :: [LStmtLR Name idR (Located (body idR))] -> NameSet
- hsValBindsImplicits :: HsValBindsLR Name idR -> NameSet
- lPatImplicits :: LPat Name -> NameSet

# Documentation

mkHsPar :: LHsExpr id -> LHsExpr id #

mkHsApp :: LHsExpr name -> LHsExpr name -> LHsExpr name #

mkHsAppType :: LHsExpr name -> LHsWcType name -> LHsExpr name #

mkHsAppTypeOut :: LHsExpr Id -> LHsWcType Name -> LHsExpr Id #

mkHsCaseAlt :: LPat id -> Located (body id) -> LMatch id (Located (body id)) #

A simple case alternative with a single pattern, no binds, no guards; pre-typechecking

mkSimpleMatch :: HsMatchContext (NameOrRdrName id) -> [LPat id] -> Located (body id) -> LMatch id (Located (body id)) #

unguardedGRHSs :: Located (body id) -> GRHSs id (Located (body id)) #

unguardedRHS :: SrcSpan -> Located (body id) -> [LGRHS id (Located (body id))] #

mkMatchGroup :: PostTc name Type ~ PlaceHolder => Origin -> [LMatch name (Located (body name))] -> MatchGroup name (Located (body name)) #

mkMatch :: HsMatchContext (NameOrRdrName id) -> [LPat id] -> LHsExpr id -> Located (HsLocalBinds id) -> LMatch id (LHsExpr id) #

mkPrefixFunRhs :: Located id -> HsMatchContext id #

Make a prefix, non-strict function `HsMatchContext`

mkHsLam :: [LPat RdrName] -> LHsExpr RdrName -> LHsExpr RdrName #

mkHsIf :: LHsExpr id -> LHsExpr id -> LHsExpr id -> HsExpr id #

mkHsWrap :: HsWrapper -> HsExpr id -> HsExpr id #

mkLHsWrap :: HsWrapper -> LHsExpr id -> LHsExpr id #

mkHsWrapCo :: TcCoercionN -> HsExpr id -> HsExpr id #

mkHsWrapCoR :: TcCoercionR -> HsExpr id -> HsExpr id #

mkLHsWrapCo :: TcCoercionN -> LHsExpr id -> LHsExpr id #

mkHsDictLet :: TcEvBinds -> LHsExpr Id -> LHsExpr Id #

mkHsLams :: [TyVar] -> [EvVar] -> LHsExpr Id -> LHsExpr Id #

mkHsOpApp :: LHsExpr id -> id -> LHsExpr id -> HsExpr id #

mkHsDo :: HsStmtContext Name -> [ExprLStmt RdrName] -> HsExpr RdrName #

mkHsComp :: HsStmtContext Name -> [ExprLStmt RdrName] -> LHsExpr RdrName -> HsExpr RdrName #

mkHsWrapPat :: HsWrapper -> Pat id -> Type -> Pat id #

mkHsWrapPatCo :: TcCoercionN -> Pat id -> Type -> Pat id #

mkLHsPar :: LHsExpr name -> LHsExpr name #

mkHsCmdWrap :: HsWrapper -> HsCmd id -> HsCmd id #

mkLHsCmdWrap :: HsWrapper -> LHsCmd id -> LHsCmd id #

nlHsTyApp :: name -> [Type] -> LHsExpr name #

nlHsTyApps :: name -> [Type] -> [LHsExpr name] -> LHsExpr name #

nlHsVar :: id -> LHsExpr id #

nlHsDataCon :: DataCon -> LHsExpr Id #

nlHsLit :: HsLit -> LHsExpr id #

nlHsApp :: LHsExpr id -> LHsExpr id -> LHsExpr id #

nlHsApps :: id -> [LHsExpr id] -> LHsExpr id #

nlHsSyntaxApps :: SyntaxExpr id -> [LHsExpr id] -> LHsExpr id #

nlHsIntLit :: Integer -> LHsExpr id #

nlHsVarApps :: id -> [id] -> LHsExpr id #

nlHsDo :: HsStmtContext Name -> [LStmt RdrName (LHsExpr RdrName)] -> LHsExpr RdrName #

nlHsOpApp :: LHsExpr id -> id -> LHsExpr id -> LHsExpr id #

nlHsLam :: LMatch RdrName (LHsExpr RdrName) -> LHsExpr RdrName #

nlHsPar :: LHsExpr id -> LHsExpr id #

nlHsIf :: LHsExpr id -> LHsExpr id -> LHsExpr id -> LHsExpr id #

nlHsCase :: LHsExpr RdrName -> [LMatch RdrName (LHsExpr RdrName)] -> LHsExpr RdrName #

nlList :: [LHsExpr RdrName] -> LHsExpr RdrName #

mkLHsTupleExpr :: [LHsExpr a] -> LHsExpr a #

mkLHsVarTuple :: [a] -> LHsExpr a #

missingTupArg :: HsTupArg RdrName #

typeToLHsType :: Type -> LHsType RdrName #

Converting a Type to an HsType RdrName This is needed to implement GeneralizedNewtypeDeriving.

Note that we use `getRdrName` extensively, which generates Exact RdrNames rather than strings.

# Constructing general big tuples

GHCs built in tuples can only go up to `mAX_TUPLE_SIZE` in arity, but we might concievably want to build such a massive tuple as part of the output of a desugaring stage (notably that for list comprehensions).

We call tuples above this size "big tuples", and emulate them by creating and pattern matching on >nested< tuples that are expressible by GHC.

Nesting policy: it's better to have a 2-tuple of 10-tuples (3 objects) than a 10-tuple of 2-tuples (11 objects), so we want the leaves of any construction to be big.

If you just use the `mkBigCoreTup`, `mkBigCoreVarTupTy`, `mkTupleSelector` and `mkTupleCase` functions to do all your work with tuples you should be fine, and not have to worry about the arity limitation at all.

mkChunkified #

Arguments

:: ([a] -> a) | "Small" constructor function, of maximum input arity `mAX_TUPLE_SIZE`
-> [a] | Possible "big" list of things to construct from
-> a | Constructed thing made possible by recursive decomposition

Lifts a "small" constructor into a "big" constructor by recursive decompositon

chunkify :: [a] -> [[a]] #

Split a list into lists that are small enough to have a corresponding tuple arity. The sub-lists of the result all have length <= `mAX_TUPLE_SIZE` But there may be more than `mAX_TUPLE_SIZE` sub-lists

mkFunBind :: Located RdrName -> [LMatch RdrName (LHsExpr RdrName)] -> HsBind RdrName #

mkVarBind :: id -> LHsExpr id -> LHsBind id #

mkHsVarBind :: SrcSpan -> RdrName -> LHsExpr RdrName -> LHsBind RdrName #

mk_easy_FunBind :: SrcSpan -> RdrName -> [LPat RdrName] -> LHsExpr RdrName -> LHsBind RdrName #

mkTopFunBind :: Origin -> Located Name -> [LMatch Name (LHsExpr Name)] -> HsBind Name #

mkPatSynBind :: Located RdrName -> HsPatSynDetails (Located RdrName) -> LPat RdrName -> HsPatSynDir RdrName -> HsBind RdrName #

isInfixFunBind :: HsBindLR id1 id2 -> Bool #

If any of the matches in the `FunBind` are infix, the `FunBind` is considered infix.

mkHsIntegral :: SourceText -> Integer -> PostTc RdrName Type -> HsOverLit RdrName #

mkHsFractional :: FractionalLit -> PostTc RdrName Type -> HsOverLit RdrName #

mkHsIsString :: SourceText -> FastString -> PostTc RdrName Type -> HsOverLit RdrName #

mkHsString :: String -> HsLit #

mkHsStringPrimLit :: FastString -> HsLit #

mkNPat :: Located (HsOverLit RdrName) -> Maybe (SyntaxExpr RdrName) -> Pat RdrName #

mkNPlusKPat :: Located RdrName -> Located (HsOverLit RdrName) -> Pat RdrName #

nlVarPat :: id -> LPat id #

nlLitPat :: HsLit -> LPat id #

nlConVarPat :: RdrName -> [RdrName] -> LPat RdrName #

nlConVarPatName :: Name -> [Name] -> LPat Name #

nlConPat :: RdrName -> [LPat RdrName] -> LPat RdrName #

nlConPatName :: Name -> [LPat Name] -> LPat Name #

nlInfixConPat :: id -> LPat id -> LPat id -> LPat id #

nlNullaryConPat :: id -> LPat id #

nlWildConPat :: DataCon -> LPat RdrName #

nlWildPat :: LPat RdrName #

nlWildPatName :: LPat Name #

nlWildPatId :: LPat Id #

nlTuplePat :: [LPat id] -> Boxity -> LPat id #

mkParPat :: LPat name -> LPat name #

nlParPat :: LPat name -> LPat name #

mkBigLHsVarTup :: [id] -> LHsExpr id #

mkBigLHsTup :: [LHsExpr id] -> LHsExpr id #

mkBigLHsVarPatTup :: [id] -> LPat id #

mkBigLHsPatTup :: [LPat id] -> LPat id #

mkHsAppTy :: LHsType name -> LHsType name -> LHsType name #

mkHsAppTys :: LHsType name -> [LHsType name] -> LHsType name #

userHsTyVarBndrs :: SrcSpan -> [name] -> [LHsTyVarBndr name] #

userHsLTyVarBndrs :: SrcSpan -> [Located name] -> [LHsTyVarBndr name] #

mkLHsSigType :: LHsType RdrName -> LHsSigType RdrName #

mkLHsSigWcType :: LHsType RdrName -> LHsSigWcType RdrName #

mkClassOpSigs :: [LSig RdrName] -> [LSig RdrName] #

mkHsSigEnv :: forall a. (LSig Name -> Maybe ([Located Name], a)) -> [LSig Name] -> NameEnv a #

nlHsAppTy :: LHsType name -> LHsType name -> LHsType name #

nlHsTyVar :: name -> LHsType name #

nlHsFunTy :: LHsType name -> LHsType name -> LHsType name #

nlHsParTy :: LHsType name -> LHsType name #

nlHsTyConApp :: name -> [LHsType name] -> LHsType name #

mkTransformStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL) #

mkTransformByStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL) #

mkBodyStmt :: Located (bodyR RdrName) -> StmtLR idL RdrName (Located (bodyR RdrName)) #

mkBindStmt :: PostTc idR Type ~ PlaceHolder => LPat idL -> Located (bodyR idR) -> StmtLR idL idR (Located (bodyR idR)) #

mkTcBindStmt :: LPat Id -> Located (bodyR Id) -> StmtLR Id Id (Located (bodyR Id)) #

mkLastStmt :: Located (bodyR idR) -> StmtLR idL idR (Located (bodyR idR)) #

emptyTransStmt :: PostTc idR Type ~ PlaceHolder => StmtLR idL idR (LHsExpr idR) #

mkGroupUsingStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL) #

mkGroupByUsingStmt :: PostTc idR Type ~ PlaceHolder => [ExprLStmt idL] -> LHsExpr idR -> LHsExpr idR -> StmtLR idL idR (LHsExpr idL) #

emptyRecStmt :: StmtLR idL RdrName bodyR #

emptyRecStmtName :: StmtLR Name Name bodyR #

emptyRecStmtId :: StmtLR Id Id bodyR #

mkRecStmt :: [LStmtLR idL RdrName bodyR] -> StmtLR idL RdrName bodyR #

mkHsSpliceTy :: SpliceDecoration -> LHsExpr RdrName -> HsType RdrName #

mkHsSpliceE :: SpliceDecoration -> LHsExpr RdrName -> HsExpr RdrName #

mkHsSpliceTE :: SpliceDecoration -> LHsExpr RdrName -> HsExpr RdrName #

mkUntypedSplice :: SpliceDecoration -> LHsExpr RdrName -> HsSplice RdrName #

mkHsQuasiQuote :: RdrName -> SrcSpan -> FastString -> HsSplice RdrName #

unqualQuasiQuote :: RdrName #

noRebindableInfo :: PlaceHolder #

isUnliftedHsBind :: HsBind Id -> Bool #

Should we treat this as an unlifted bind? This will be true for any bind that binds an unlifted variable, but we must be careful around AbsBinds. See Note [Unlifted id check in isUnliftedHsBind]. For usage information, see Note [Strict binds check] is DsBinds.

isBangedBind :: HsBind Id -> Bool #

Is a binding a strict variable bind (e.g. `!x = ...`)?

collectLocalBinders :: HsLocalBindsLR idL idR -> [idL] #

collectHsValBinders :: HsValBindsLR idL idR -> [idL] #

collectHsBindListBinders :: [LHsBindLR idL idR] -> [idL] #

collectHsIdBinders :: HsValBindsLR idL idR -> [idL] #

collectHsBindsBinders :: LHsBindsLR idL idR -> [idL] #

collectHsBindBinders :: HsBindLR idL idR -> [idL] #

collectMethodBinders :: LHsBindsLR RdrName idR -> [Located RdrName] #

collectPatBinders :: LPat a -> [a] #

collectPatsBinders :: [LPat a] -> [a] #

collectLStmtsBinders :: [LStmtLR idL idR body] -> [idL] #

collectStmtsBinders :: [StmtLR idL idR body] -> [idL] #

collectLStmtBinders :: LStmtLR idL idR body -> [idL] #

collectStmtBinders :: StmtLR idL idR body -> [idL] #

hsLTyClDeclBinders :: Located (TyClDecl name) -> ([Located name], [LFieldOcc name]) #

Returns all the binding names of the decl. The first one is

hsTyClForeignBinders :: [TyClGroup Name] -> [LForeignDecl Name] -> [Name] #

hsPatSynSelectors :: HsValBinds id -> [id] #

getPatSynBinds :: [(RecFlag, LHsBinds id)] -> [PatSynBind id id] #

hsForeignDeclsBinders :: [LForeignDecl name] -> [Located name] #

hsGroupBinders :: HsGroup Name -> [Name] #

hsDataFamInstBinders :: DataFamInstDecl name -> ([Located name], [LFieldOcc name]) #

hsDataDefnBinders :: HsDataDefn name -> ([Located name], [LFieldOcc name]) #

lStmtsImplicits :: [LStmtLR Name idR (Located (body idR))] -> NameSet #

hsValBindsImplicits :: HsValBindsLR Name idR -> NameSet #

lPatImplicits :: LPat Name -> NameSet #