GHC.Tc.Solver.Flatten

ghc-9.0.2: The GHC API

Safe Haskell | Safe-Inferred
Language | Haskell2010

GHC.Tc.Solver.Flatten

Synopsis

- data FlattenMode
  - = FM_FlattenAll
  - | FM_SubstOnly
- flatten :: FlattenMode -> CtEvidence -> TcType -> TcS (Xi, TcCoercion)
- flattenKind :: CtLoc -> CtFlavour -> TcType -> TcS (Xi, TcCoercionN)
- flattenArgsNom :: CtEvidence -> TyCon -> [TcType] -> TcS ([Xi], [TcCoercion], TcCoercionN)
- rewriteTyVar :: TcTyVar -> TcS TcType
- flattenType :: CtLoc -> TcType -> TcS TcType
- unflattenWanteds :: Cts -> Cts -> TcS Cts

# Documentation

data FlattenMode Source #

Constructors

FM_FlattenAll |
FM_SubstOnly |

#### Instances

Instances details

Outputable FlattenMode Source # |
Instance details Defined in GHC.Tc.Solver.Flatten Methods ppr :: FlattenMode -> SDoc Source # pprPrec :: Rational -> FlattenMode -> SDoc Source #

flatten :: FlattenMode -> CtEvidence -> TcType -> TcS (Xi, TcCoercion) Source #

See Note [Flattening]. If (xi, co) <- flatten mode ev ty, then co :: xi ~r ty where r is the role in `ev`. If `mode` is `FM_FlattenAll`, then `xi` is almost function-free (Note [Almost function-free] in GHC.Tc.Types).

flattenKind :: CtLoc -> CtFlavour -> TcType -> TcS (Xi, TcCoercionN) Source #

flattenArgsNom :: CtEvidence -> TyCon -> [TcType] -> TcS ([Xi], [TcCoercion], TcCoercionN) Source #

rewriteTyVar :: TcTyVar -> TcS TcType Source #

flattenType :: CtLoc -> TcType -> TcS TcType Source #

Flatten a type w.r.t. nominal equality. This is useful to rewrite a type w.r.t. any givens. It does not do type-family reduction. This will never emit new constraints. Call this when the inert set contains only givens.

unflattenWanteds :: Cts -> Cts -> TcS Cts Source #