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.Tc.Zonk.Env

The ZonkEnv zonking environment, and the ZonkT and ZonkBndrT monad transformers, for the final zonking to type in GHC.Tc.Zonk.Type.

See Note [Module structure for zonking] in GHC.Tc.Zonk.Type.

  • 4 types
  • 11 values
  • Packageghc-9.10.3
  • Exports16
  • LanguageGHC2021
  • LicenceBSD-3-Clause
  • SourceEnv.hs

The ZonkEnv

4 declarations
datadata ZonkFlexi
#

How should we handle unfilled unification variables in the zonker?

See Note [Un-unified unification variables]

Constructors

  • DefaultFlexi

    Default unbound unification variables to Any

  • SkolemiseFlexi

    Skolemise unbound unification variables See Note [Zonking the LHS of a RULE]

  • RuntimeUnkFlexi

    Used in the GHCi debugger

  • NoFlexi

    Panic on unfilled meta-variables See Note [Error on unconstrained meta-variables] in GHC.Tc.Utils.TcMType

The ZonkT and ZonkBndrT zonking monad transformers

4 declarations
newtypenewtype ZonkT (m :: Type -> Type) a
#

A reader monad over ZonkEnv, for zonking computations which don't modify the ZonkEnv (e.g. don't bind any variables).

Use ZonkBndrT when you need to modify the ZonkEnv (e.g. to bind a variable).

Instances6MonadTrans, Monad, Functor, MonadFix, Applicative, MonadIO
newtypenewtype ZonkBndrT (m :: Type -> Type) a
#

Zonk binders, bringing them into scope in the inner computation.

Can be thought of as a state monad transformer StateT ZonkEnv m a, but written in continuation-passing style.

See Note [Continuation-passing style for zonking].

Constructors

Instances5Monad, Functor, MonadFix, Applicative, MonadIO

Going between ZonkT and ZonkBndrT

valuerunZonkBndrT :: ZonkBndrT m a -> forall r. (a -> ZonkT m r) -> ZonkT m r
#

Zonk some binders and run the continuation.

Example:

zonk (ForAllTy (Bndr tv vis) body_ty)
 = runZonkBndrT (zonkTyBndrX tv) $ \ tv' ->
   do { body_ty' <- zonkTcTypeToTypeX body_ty
      ; return (ForAllTy (Bndr tv' vis) body_ty') }

See Note [Continuation-passing style for zonking].

Modifying and extending the ZonkEnv in ZonkBndrT