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