HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Moduleghc-9.10.3GHC2021

GHC.Rename.Utils

  • 1 type
  • 51 values
  • Packageghc-9.10.3
  • Exports52
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceUtils.hs

Throw an error message if a user attempts to quantify an inferred type variable in a place where specificity cannot be observed. For example, forall {a}. [a] -> [a] would be rejected to the inferred type variable {a}, but forall a. [a] -> [a] would be accepted. See Note [Unobservably inferred type variables].

Examines a non-outermost type for foralls or contexts, which are assumed to be nested. For example, in the following declaration:

instance forall a. forall b. C (Either a b)

The outermost forall a is fine, but the nested forall b is not. We invoke noNestedForallsContextsErr on the type forall b. C (Either a b) to catch the nested forall and create a suitable error message. noNestedForallsContextsErr returns Just err_msg if such a forall or context is found, and returns Nothing otherwise.

This is currently used in the following places:

  • In GADT constructor types (in rnConDecl). See Note [GADT abstract syntax] (Wrinkle: No nested foralls or contexts) in GHC.Hs.Type.

  • In instance declaration types (in rnClsIntDecl and rnSrcDerivDecl in GHC.Rename.Module and renameSig in GHC.Rename.Bind). See Note [No nested foralls or contexts in instance types] in GHC.Hs.Type.