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