| Safe Haskell | None | 
|---|---|
| Language | Haskell2010 | 
TcEvidence
Synopsis
- data HsWrapper
 - (<.>) :: HsWrapper -> HsWrapper -> HsWrapper
 - mkWpTyApps :: [Type] -> HsWrapper
 - mkWpEvApps :: [EvTerm] -> HsWrapper
 - mkWpEvVarApps :: [EvVar] -> HsWrapper
 - mkWpTyLams :: [TyVar] -> HsWrapper
 - mkWpLams :: [Var] -> HsWrapper
 - mkWpLet :: TcEvBinds -> HsWrapper
 - mkWpCastN :: TcCoercionN -> HsWrapper
 - mkWpCastR :: TcCoercionR -> HsWrapper
 - collectHsWrapBinders :: HsWrapper -> ([Var], HsWrapper)
 - mkWpFun :: HsWrapper -> HsWrapper -> TcType -> TcType -> SDoc -> HsWrapper
 - mkWpFuns :: [(TcType, HsWrapper)] -> TcType -> HsWrapper -> SDoc -> HsWrapper
 - idHsWrapper :: HsWrapper
 - isIdHsWrapper :: HsWrapper -> Bool
 - pprHsWrapper :: HsWrapper -> (Bool -> SDoc) -> SDoc
 - data TcEvBinds
- = TcEvBinds EvBindsVar
 - | EvBinds (Bag EvBind)
 
 - data EvBindsVar
 - newtype EvBindMap = EvBindMap {}
 - emptyEvBindMap :: EvBindMap
 - extendEvBinds :: EvBindMap -> EvBind -> EvBindMap
 - lookupEvBind :: EvBindMap -> EvVar -> Maybe EvBind
 - evBindMapBinds :: EvBindMap -> Bag EvBind
 - foldEvBindMap :: (EvBind -> a -> a) -> a -> EvBindMap -> a
 - filterEvBindMap :: (EvBind -> Bool) -> EvBindMap -> EvBindMap
 - isEmptyEvBindMap :: EvBindMap -> Bool
 - data EvBind = EvBind {}
 - emptyTcEvBinds :: TcEvBinds
 - isEmptyTcEvBinds :: TcEvBinds -> Bool
 - mkGivenEvBind :: EvVar -> EvTerm -> EvBind
 - mkWantedEvBind :: EvVar -> EvTerm -> EvBind
 - evBindVar :: EvBind -> EvVar
 - isCoEvBindsVar :: EvBindsVar -> Bool
 - data EvTerm
 - type EvExpr = CoreExpr
 - evId :: EvId -> EvExpr
 - evCoercion :: TcCoercion -> EvTerm
 - evCast :: EvExpr -> TcCoercion -> EvTerm
 - evDFunApp :: DFunId -> [Type] -> [EvExpr] -> EvTerm
 - evDataConApp :: DataCon -> [Type] -> [EvExpr] -> EvTerm
 - evSelector :: Id -> [Type] -> [EvExpr] -> EvExpr
 - mkEvCast :: EvExpr -> TcCoercion -> EvTerm
 - evVarsOfTerm :: EvTerm -> VarSet
 - mkEvScSelectors :: Class -> [TcType] -> [(TcPredType, EvExpr)]
 - evTypeable :: Type -> EvTypeable -> EvTerm
 - findNeededEvVars :: EvBindMap -> VarSet -> VarSet
 - evTermCoercion :: EvTerm -> TcCoercion
 - evTermCoercion_maybe :: EvTerm -> Maybe TcCoercion
 - data EvCallStack
 - data EvTypeable
 - type TcCoercion = Coercion
 - type TcCoercionR = CoercionR
 - type TcCoercionN = CoercionN
 - type TcCoercionP = CoercionP
 - data CoercionHole
 - data Role
 - data LeftOrRight
 - pickLR :: LeftOrRight -> (a, a) -> a
 - mkTcReflCo :: Role -> TcType -> TcCoercion
 - mkTcNomReflCo :: TcType -> TcCoercionN
 - mkTcRepReflCo :: TcType -> TcCoercionR
 - mkTcTyConAppCo :: Role -> TyCon -> [TcCoercion] -> TcCoercion
 - mkTcAppCo :: TcCoercion -> TcCoercionN -> TcCoercion
 - mkTcFunCo :: Role -> TcCoercion -> TcCoercion -> TcCoercion
 - mkTcAxInstCo :: Role -> CoAxiom br -> BranchIndex -> [TcType] -> [TcCoercion] -> TcCoercion
 - mkTcUnbranchedAxInstCo :: CoAxiom Unbranched -> [TcType] -> [TcCoercion] -> TcCoercionR
 - mkTcForAllCo :: TyVar -> TcCoercionN -> TcCoercion -> TcCoercion
 - mkTcForAllCos :: [(TyVar, TcCoercionN)] -> TcCoercion -> TcCoercion
 - mkTcSymCo :: TcCoercion -> TcCoercion
 - mkTcTransCo :: TcCoercion -> TcCoercion -> TcCoercion
 - mkTcNthCo :: Role -> Int -> TcCoercion -> TcCoercion
 - mkTcLRCo :: LeftOrRight -> TcCoercion -> TcCoercion
 - mkTcSubCo :: TcCoercionN -> TcCoercionR
 - maybeTcSubCo :: EqRel -> TcCoercion -> TcCoercion
 - tcDowngradeRole :: Role -> Role -> TcCoercion -> TcCoercion
 - mkTcAxiomRuleCo :: CoAxiomRule -> [TcCoercion] -> TcCoercionR
 - mkTcGReflRightCo :: Role -> TcType -> TcCoercionN -> TcCoercion
 - mkTcGReflLeftCo :: Role -> TcType -> TcCoercionN -> TcCoercion
 - mkTcPhantomCo :: TcCoercionN -> TcType -> TcType -> TcCoercionP
 - mkTcCoherenceLeftCo :: Role -> TcType -> TcCoercionN -> TcCoercion -> TcCoercion
 - mkTcCoherenceRightCo :: Role -> TcType -> TcCoercionN -> TcCoercion -> TcCoercion
 - mkTcKindCo :: TcCoercion -> TcCoercionN
 - tcCoercionKind :: TcCoercion -> Pair TcType
 - coVarsOfTcCo :: TcCoercion -> TcTyCoVarSet
 - mkTcCoVarCo :: CoVar -> TcCoercion
 - isTcReflCo :: TcCoercion -> Bool
 - isTcReflexiveCo :: TcCoercion -> Bool
 - tcCoercionRole :: TcCoercion -> Role
 - unwrapIP :: Type -> CoercionR
 - wrapIP :: Type -> CoercionR
 
Documentation
Constructors
| WpHole | |
| WpCompose HsWrapper HsWrapper | |
| WpFun HsWrapper HsWrapper TcType SDoc | |
| WpCast TcCoercionR | |
| WpEvLam EvVar | |
| WpEvApp EvTerm | |
| WpTyLam TyVar | |
| WpTyApp KindOrType | |
| WpLet TcEvBinds | 
Instances
| Data HsWrapper Source # | |
Defined in TcEvidence Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> HsWrapper -> c HsWrapper # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c HsWrapper # toConstr :: HsWrapper -> Constr # dataTypeOf :: HsWrapper -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c HsWrapper) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c HsWrapper) # gmapT :: (forall b. Data b => b -> b) -> HsWrapper -> HsWrapper # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> HsWrapper -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> HsWrapper -> r # gmapQ :: (forall d. Data d => d -> u) -> HsWrapper -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> HsWrapper -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> HsWrapper -> m HsWrapper # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> HsWrapper -> m HsWrapper # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> HsWrapper -> m HsWrapper #  | |
| Outputable HsWrapper Source # | |
mkWpTyApps :: [Type] -> HsWrapper Source #
mkWpEvApps :: [EvTerm] -> HsWrapper Source #
mkWpEvVarApps :: [EvVar] -> HsWrapper Source #
mkWpTyLams :: [TyVar] -> HsWrapper Source #
mkWpCastN :: TcCoercionN -> HsWrapper Source #
mkWpCastR :: TcCoercionR -> HsWrapper Source #
mkWpFuns :: [(TcType, HsWrapper)] -> TcType -> HsWrapper -> SDoc -> HsWrapper Source #
mkWpFuns [(ty1, wrap1), (ty2, wrap2)] ty_res wrap_res,
 where wrap1 :: ty1 "->" ty1' and wrap2 :: ty2 "->" ty2',
 wrap3 :: ty3 "->" ty3' and ty_res is either ty3 or ty3',
 gives a wrapper (ty1' -> ty2' -> ty3) "->" (ty1 -> ty2 -> ty3').
 Notice that the result wrapper goes the other way round to all
 the others. This is a result of sub-typing contravariance.
 The SDoc is a description of what you were doing when you called mkWpFuns.
isIdHsWrapper :: HsWrapper -> Bool Source #
Constructors
| TcEvBinds EvBindsVar | |
| EvBinds (Bag EvBind) | 
Instances
| Data TcEvBinds Source # | |
Defined in TcEvidence Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> TcEvBinds -> c TcEvBinds # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c TcEvBinds # toConstr :: TcEvBinds -> Constr # dataTypeOf :: TcEvBinds -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c TcEvBinds) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c TcEvBinds) # gmapT :: (forall b. Data b => b -> b) -> TcEvBinds -> TcEvBinds # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> TcEvBinds -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> TcEvBinds -> r # gmapQ :: (forall d. Data d => d -> u) -> TcEvBinds -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> TcEvBinds -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> TcEvBinds -> m TcEvBinds # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> TcEvBinds -> m TcEvBinds # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> TcEvBinds -> m TcEvBinds #  | |
| Outputable TcEvBinds Source # | |
data EvBindsVar Source #
Constructors
| EvBindsVar | |
| CoEvBindsVar | |
Instances
| Outputable EvBindsVar Source # | |
Defined in TcEvidence  | |
| Uniquable EvBindsVar Source # | |
Defined in TcEvidence Methods getUnique :: EvBindsVar -> Unique Source #  | |
Constructors
| EvBindMap | |
Fields  | |
foldEvBindMap :: (EvBind -> a -> a) -> a -> EvBindMap -> a Source #
isEmptyEvBindMap :: EvBindMap -> Bool Source #
isEmptyTcEvBinds :: TcEvBinds -> Bool Source #
isCoEvBindsVar :: EvBindsVar -> Bool Source #
Constructors
| EvExpr EvExpr | |
| EvTypeable Type EvTypeable | |
| EvFun | |
Instances
| Data EvTerm Source # | |
Defined in TcEvidence Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> EvTerm -> c EvTerm # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c EvTerm # toConstr :: EvTerm -> Constr # dataTypeOf :: EvTerm -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c EvTerm) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EvTerm) # gmapT :: (forall b. Data b => b -> b) -> EvTerm -> EvTerm # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EvTerm -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EvTerm -> r # gmapQ :: (forall d. Data d => d -> u) -> EvTerm -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> EvTerm -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> EvTerm -> m EvTerm # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> EvTerm -> m EvTerm # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> EvTerm -> m EvTerm #  | |
| Outputable EvTerm Source # | |
evCoercion :: TcCoercion -> EvTerm Source #
evVarsOfTerm :: EvTerm -> VarSet Source #
mkEvScSelectors :: Class -> [TcType] -> [(TcPredType, EvExpr)] Source #
evTypeable :: Type -> EvTypeable -> EvTerm Source #
evTermCoercion :: EvTerm -> TcCoercion Source #
data EvCallStack Source #
Evidence for CallStack implicit parameters.
Constructors
| EvCsEmpty | |
| EvCsPushCall Name RealSrcSpan EvExpr | 
  | 
Instances
| Data EvCallStack Source # | |
Defined in TcEvidence Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> EvCallStack -> c EvCallStack # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c EvCallStack # toConstr :: EvCallStack -> Constr # dataTypeOf :: EvCallStack -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c EvCallStack) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EvCallStack) # gmapT :: (forall b. Data b => b -> b) -> EvCallStack -> EvCallStack # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EvCallStack -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EvCallStack -> r # gmapQ :: (forall d. Data d => d -> u) -> EvCallStack -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> EvCallStack -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> EvCallStack -> m EvCallStack # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> EvCallStack -> m EvCallStack # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> EvCallStack -> m EvCallStack #  | |
| Outputable EvCallStack Source # | |
Defined in TcEvidence  | |
data EvTypeable Source #
Instructions on how to make a Typeable dictionary.
 See Note [Typeable evidence terms]
Constructors
| EvTypeableTyCon TyCon [EvTerm] | Dictionary for   | 
| EvTypeableTyApp EvTerm EvTerm | Dictionary for   | 
| EvTypeableTrFun EvTerm EvTerm | Dictionary for   | 
| EvTypeableTyLit EvTerm | Dictionary for a type literal,
 e.g.   | 
Instances
| Data EvTypeable Source # | |
Defined in TcEvidence Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> EvTypeable -> c EvTypeable # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c EvTypeable # toConstr :: EvTypeable -> Constr # dataTypeOf :: EvTypeable -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c EvTypeable) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c EvTypeable) # gmapT :: (forall b. Data b => b -> b) -> EvTypeable -> EvTypeable # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> EvTypeable -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> EvTypeable -> r # gmapQ :: (forall d. Data d => d -> u) -> EvTypeable -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> EvTypeable -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> EvTypeable -> m EvTypeable # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> EvTypeable -> m EvTypeable # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> EvTypeable -> m EvTypeable #  | |
| Outputable EvTypeable Source # | |
Defined in TcEvidence  | |
type TcCoercion = Coercion Source #
type TcCoercionR = CoercionR Source #
type TcCoercionN = CoercionN Source #
type TcCoercionP = CoercionP Source #
data CoercionHole Source #
A coercion to be filled in by the type-checker. See Note [Coercion holes]
Instances
| Data CoercionHole Source # | |
Defined in TyCoRep Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CoercionHole -> c CoercionHole # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CoercionHole # toConstr :: CoercionHole -> Constr # dataTypeOf :: CoercionHole -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c CoercionHole) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CoercionHole) # gmapT :: (forall b. Data b => b -> b) -> CoercionHole -> CoercionHole # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CoercionHole -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CoercionHole -> r # gmapQ :: (forall d. Data d => d -> u) -> CoercionHole -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CoercionHole -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CoercionHole -> m CoercionHole # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CoercionHole -> m CoercionHole # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CoercionHole -> m CoercionHole #  | |
| Outputable CoercionHole Source # | |
Constructors
| Nominal | |
| Representational | |
| Phantom | 
Instances
| Eq Role Source # | |
| Data Role Source # | |
Defined in CoAxiom Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Role -> c Role # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Role # dataTypeOf :: Role -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Role) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Role) # gmapT :: (forall b. Data b => b -> b) -> Role -> Role # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Role -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Role -> r # gmapQ :: (forall d. Data d => d -> u) -> Role -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Role -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Role -> m Role # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Role -> m Role # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Role -> m Role #  | |
| Ord Role Source # | |
| Outputable Role Source # | |
| Binary Role Source # | |
data LeftOrRight Source #
Instances
| Eq LeftOrRight Source # | |
Defined in BasicTypes  | |
| Data LeftOrRight Source # | |
Defined in BasicTypes Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> LeftOrRight -> c LeftOrRight # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c LeftOrRight # toConstr :: LeftOrRight -> Constr # dataTypeOf :: LeftOrRight -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c LeftOrRight) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c LeftOrRight) # gmapT :: (forall b. Data b => b -> b) -> LeftOrRight -> LeftOrRight # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> LeftOrRight -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> LeftOrRight -> r # gmapQ :: (forall d. Data d => d -> u) -> LeftOrRight -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> LeftOrRight -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> LeftOrRight -> m LeftOrRight # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> LeftOrRight -> m LeftOrRight # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> LeftOrRight -> m LeftOrRight #  | |
| Outputable LeftOrRight Source # | |
Defined in BasicTypes  | |
| Binary LeftOrRight Source # | |
pickLR :: LeftOrRight -> (a, a) -> a Source #
mkTcReflCo :: Role -> TcType -> TcCoercion Source #
mkTcNomReflCo :: TcType -> TcCoercionN Source #
mkTcRepReflCo :: TcType -> TcCoercionR Source #
mkTcTyConAppCo :: Role -> TyCon -> [TcCoercion] -> TcCoercion Source #
mkTcAppCo :: TcCoercion -> TcCoercionN -> TcCoercion Source #
mkTcFunCo :: Role -> TcCoercion -> TcCoercion -> TcCoercion Source #
mkTcAxInstCo :: Role -> CoAxiom br -> BranchIndex -> [TcType] -> [TcCoercion] -> TcCoercion Source #
mkTcUnbranchedAxInstCo :: CoAxiom Unbranched -> [TcType] -> [TcCoercion] -> TcCoercionR Source #
mkTcForAllCo :: TyVar -> TcCoercionN -> TcCoercion -> TcCoercion Source #
mkTcForAllCos :: [(TyVar, TcCoercionN)] -> TcCoercion -> TcCoercion Source #
mkTcSymCo :: TcCoercion -> TcCoercion Source #
mkTcTransCo :: TcCoercion -> TcCoercion -> TcCoercion Source #
mkTcNthCo :: Role -> Int -> TcCoercion -> TcCoercion Source #
mkTcLRCo :: LeftOrRight -> TcCoercion -> TcCoercion Source #
mkTcSubCo :: TcCoercionN -> TcCoercionR Source #
maybeTcSubCo :: EqRel -> TcCoercion -> TcCoercion Source #
tcDowngradeRole :: Role -> Role -> TcCoercion -> TcCoercion Source #
mkTcAxiomRuleCo :: CoAxiomRule -> [TcCoercion] -> TcCoercionR Source #
mkTcGReflRightCo :: Role -> TcType -> TcCoercionN -> TcCoercion Source #
mkTcGReflLeftCo :: Role -> TcType -> TcCoercionN -> TcCoercion Source #
mkTcPhantomCo :: TcCoercionN -> TcType -> TcType -> TcCoercionP Source #
mkTcCoherenceLeftCo :: Role -> TcType -> TcCoercionN -> TcCoercion -> TcCoercion Source #
mkTcCoherenceRightCo :: Role -> TcType -> TcCoercionN -> TcCoercion -> TcCoercion Source #
mkTcKindCo :: TcCoercion -> TcCoercionN Source #
tcCoercionKind :: TcCoercion -> Pair TcType Source #
mkTcCoVarCo :: CoVar -> TcCoercion Source #
isTcReflCo :: TcCoercion -> Bool Source #
isTcReflexiveCo :: TcCoercion -> Bool Source #
This version does a slow check, calculating the related types and seeing if they are equal.
tcCoercionRole :: TcCoercion -> Role Source #
unwrapIP :: Type -> CoercionR Source #
Create a Coercion that unwraps an implicit-parameter or
 overloaded-label dictionary to expose the underlying value. We
 expect the Type to have the form `IP sym ty` or `IsLabel sym ty`,
 and return a Coercion `co :: IP sym ty ~ ty` or
 `co :: IsLabel sym ty ~ Proxy# sym -> ty`.  See also
 Note [Type-checking overloaded labels] in TcExpr.