Fix and document cloneWC
[ghc.git] / compiler / typecheck / Flattening-notes
1 ToDo:
2
3 * inert_funeqs, inert_eqs: keep only the CtEvidence.
4    They are all CFunEqCans, CTyEqCans
5
6 * Consider individual data types for CFunEqCan etc
7
8 * Collapse CNonCanonical and CIrredCan
9   * RAE: I think it would be better to split off CNonCanonical into its own
10     type, and remove it completely from Ct. Then, we would keep CIrredCan
11
12 The coercion solver
13 ~~~~~~~~~~~~~~~~~~~~
14 Our hope. In GHC currently drawn from {G,W,D}, but with the coercion
15 solver the flavours become pairs
16     { (k,l) | k <- {G,W,D}, l <- {Nom,Rep} }
17
18 But can
19       a -(G,R)-> Int
20 rewrite
21       b -(G,R)-> T a
22 ?
23
24 Well, it depends on the roles at which T uses its arguments :-(.
25 So it may not be enough just to look at (flavour,role) pairs?
26
27 RAE: This is true, but it is taken care of by being careful in the
28 flattening algorithm. Flattening (T a) looks at the roles of
29 T's parameters, and chooses the role for flattening `a` appropriately.
30 This is why there must be the [Role] parameter to flattenMany.
31 Of course, this non-uniform rewriting may gum up the proof works.
32