Add asserts to other substitution functions
[ghc.git] / compiler / types / Coercion.hs-boot
1 module Coercion where
2
3 import {-# SOURCE #-} TyCoRep
4 import {-# SOURCE #-} TyCon
5
6 import CoAxiom
7 import Var
8 import Outputable
9 import Pair
10
11 mkReflCo :: Role -> Type -> Coercion
12 mkTyConAppCo :: Role -> TyCon -> [Coercion] -> Coercion
13 mkAppCo :: Coercion -> Coercion -> Coercion
14 mkForAllCo :: TyVar -> Coercion -> Coercion -> Coercion
15 mkCoVarCo :: CoVar -> Coercion
16 mkAxiomInstCo :: CoAxiom Branched -> BranchIndex -> [Coercion] -> Coercion
17 mkPhantomCo :: Coercion -> Type -> Type -> Coercion
18 mkUnsafeCo :: Role -> Type -> Type -> Coercion
19 mkUnivCo :: UnivCoProvenance -> Role -> Type -> Type -> Coercion
20 mkSymCo :: Coercion -> Coercion
21 mkTransCo :: Coercion -> Coercion -> Coercion
22 mkNthCo :: Int -> Coercion -> Coercion
23 mkLRCo :: LeftOrRight -> Coercion -> Coercion
24 mkInstCo :: Coercion -> Coercion -> Coercion
25 mkCoherenceCo :: Coercion -> Coercion -> Coercion
26 mkKindCo :: Coercion -> Coercion
27 mkSubCo :: Coercion -> Coercion
28 mkProofIrrelCo :: Role -> Coercion -> Coercion -> Coercion -> Coercion
29
30 mkFunCos :: Role -> [Coercion] -> Coercion -> Coercion
31
32 isReflCo :: Coercion -> Bool
33 isReflexiveCo :: Coercion -> Bool
34 coVarKindsTypesRole :: CoVar -> (Kind, Kind, Type, Type, Role)
35 coVarRole :: CoVar -> Role
36
37 mkCoercionType :: Role -> Type -> Type -> Type
38
39 data LiftingContext
40 liftCoSubst :: Role -> LiftingContext -> Type -> Coercion
41 coercionSize :: Coercion -> Int
42 seqCo :: Coercion -> ()
43
44 coercionKind :: Coercion -> Pair Type
45 coercionType :: Coercion -> Type
46
47 pprCo :: Coercion -> SDoc