HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Moduleghc-9.10.3GHC2021

GHC.Rename.HsType

  • 4 types
  • 44 values
  • Packageghc-9.10.3
  • Exports48
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceHsType.hs
datadata HsPatSigTypeScoping
#

Constructors

  • AlwaysBind

    Always bind any free tyvars of the given type, regardless of whether we have a forall at the top.

    For pattern type sigs, we do want to bring those type variables into scope, even if there's a forall at the top which usually stops that happening, e.g:

    \ (x :: forall a. a -> b) -> e

    Here we do bring b into scope.

    RULES can also use AlwaysBind, such as in the following example:

    {-# RULES \"f\" forall (x :: forall a. a -> b). f x = ... b ... #-}

    This only applies to RULES that do not explicitly bind their type variables. If a RULE explicitly quantifies its type variables, then NeverBind is used instead. See also Note [Pattern signature binders and scoping] in GHC.Hs.Type.

  • NeverBind

    Never bind any free tyvars. This is used for RULES that have both explicit type and term variable binders, e.g.:

    {-# RULES \"const\" forall a. forall (x :: a) y. const x y = x #-}

    The presence of the type variable binder forall a. implies that the free variables in the types of the term variable binders x and y are not bound. In the example above, there are no such free variables, but if the user had written (y :: b) instead of y in the term variable binders, then b would be rejected for being out of scope. See also Note [Pattern signature binders and scoping] in GHC.Hs.Type.

valuernImplicitTvOccs
  1. :: Maybe assoc

    Just _ => an associated type decl

  2. -> FreeKiTyVars

    Surface-syntax free vars that we will implicitly bind. May have duplicates, which are removed here.

  3. -> ([Name] -> RnM (a, FreeVars))
  4. -> RnM (a, FreeVars)
#

Create new renamed type variables corresponding to source-level ones. Duplicates are permitted, but will be removed. This is intended especially for the case of handling the implicitly bound free variables of a type signature.

Filter out any type and kind variables that are already in scope in the the environment's LocalRdrEnv. Note that this includes named wildcards, which look like perfectly ordinary type variables at this point.

Extracts the free type/kind variables from the kind signature of a HsType. This is used to implicitly quantify over k in type T = Nothing :: Maybe k. The left-to-right order of variables is preserved. See Note [Kind and type-variable binders] and Note [Ordering of implicit variables] and Note [Implicit quantification in type synonyms].

Get type/kind variables mentioned in the kind signature, preserving left-to-right order:

  • data T a (b :: k1) :: k2 -> k1 -> k2 -> Type -- result: [k2,k1]

  • data T a (b :: k1) -- result: []

See Note [Ordering of implicit variables].