ghc-8.2.2: The GHC API

Safe Haskell | None
Language | Haskell2010

TcSimplify

Synopsis

- simplifyInfer :: TcLevel -> InferMode -> [TcIdSigInst] -> [(Name, TcTauType)] -> WantedConstraints -> TcM ([TcTyVar], [EvVar], TcEvBinds, Bool)
- data InferMode
  - = ApplyMR
  - | EagerDefaulting
  - | NoRestrictions
- growThetaTyVars :: ThetaType -> TyCoVarSet -> TyVarSet
- simplifyAmbiguityCheck :: Type -> WantedConstraints -> TcM ()
- simplifyDefault :: ThetaType -> TcM ()
- simplifyTop :: WantedConstraints -> TcM (Bag EvBind)
- simplifyTopImplic :: Bag Implication -> TcM ()
- captureTopConstraints :: TcM a -> TcM (a, WantedConstraints)
- simplifyInteractive :: WantedConstraints -> TcM (Bag EvBind)
- solveEqualities :: TcM a -> TcM a
- simplifyWantedsTcM :: [CtEvidence] -> TcM WantedConstraints
- tcCheckSatisfiability :: Bag EvVar -> TcM Bool
- solveWanteds :: WantedConstraints -> TcS WantedConstraints
- solveWantedsAndDrop :: WantedConstraints -> TcS WantedConstraints
- approximateWC :: Bool -> WantedConstraints -> Cts
- runTcSDeriveds :: TcS a -> TcM a

# Documentation

simplifyInfer :: TcLevel -> InferMode -> [TcIdSigInst] -> [(Name, TcTauType)] -> WantedConstraints -> TcM ([TcTyVar], [EvVar], TcEvBinds, Bool) #

data InferMode #

How should we choose which constraints to quantify over?

Constructors

ApplyMR | Apply the monomorphism restriction, never quantifying over any constraints
EagerDefaulting | See Note [TcRnExprMode] in TcRnDriver, the :type +d case; this mode refuses to quantify over any defaultable constraint
NoRestrictions | Quantify over any constraint that satisfies TcType.pickQuantifiablePreds

Instances

Outputable InferMode # |
Methods ppr :: InferMode -> SDoc # pprPrec :: Rational -> InferMode -> SDoc #

growThetaTyVars :: ThetaType -> TyCoVarSet -> TyVarSet #

simplifyAmbiguityCheck :: Type -> WantedConstraints -> TcM () #

simplifyDefault :: ThetaType -> TcM () #

simplifyTop :: WantedConstraints -> TcM (Bag EvBind) #

simplifyTopImplic :: Bag Implication -> TcM () #

captureTopConstraints :: TcM a -> TcM (a, WantedConstraints) #

simplifyInteractive :: WantedConstraints -> TcM (Bag EvBind) #

solveEqualities :: TcM a -> TcM a #

Type-check a thing that emits only equality constraints, then solve those constraints. Fails outright if there is trouble.

simplifyWantedsTcM :: [CtEvidence] -> TcM WantedConstraints #

tcCheckSatisfiability :: Bag EvVar -> TcM Bool #

solveWanteds :: WantedConstraints -> TcS WantedConstraints #

solveWantedsAndDrop :: WantedConstraints -> TcS WantedConstraints #

approximateWC :: Bool -> WantedConstraints -> Cts #

runTcSDeriveds :: TcS a -> TcM a #

This variant of `runTcS` will keep solving, even when only Deriveds are left around. It also doesn't return any evidence, as callers won't need it.