Fix header locations
[ghc.git] / compiler / typecheck / Flattening-notes
index 5f6fd14..2aa9243 100644 (file)
@@ -1,49 +1,32 @@
 ToDo:
 
-* get rid of getEvTerm?
-
-* Float only CTyEqCans.   kind-incompatible things should be CNonCanonical,
-  so they won't float and generate a duplicate kind-unify message
-
-  Then we can stop disabling floating when there are insolubles,
-  and that will improve mc21 etc
-
-* Note [Do not add duplicate derived isols]
-  This mostly doesn't apply now, except for the fundeps
-
 * inert_funeqs, inert_eqs: keep only the CtEvidence.
    They are all CFunEqCans, CTyEqCans
 
-* remove/rewrite TcMType Note [Unflattening while zonking]
-
-* Consider individual data tpyes for CFunEqCan etc
-
-Remaining errors
-============================
-Unexpected failures:
-   generics                      GenDerivOutput1_1 [stderr mismatch] (normal)
-
-ghcirun002: internal error: ASSERTION FAILED: file rts/Interpreter.c, line 773
-   ghci/should_run               ghcirun002 [bad exit code] (ghci)
-
--package dependencies: array-0.5.0.1@array_GX4NwjS8xZkC2ZPtjgwhnz
-+package dependencies: array-0.5.0.1 base-4.8.0.0
-   safeHaskell/check/pkg01       safePkg01 [bad stdout] (normal)
-
-
-Wierd looking pattern synonym thing
-   ghci/scripts                       T8776 [bad stdout] (ghci)
-   patsyn/should_fail                 mono [stderr mismatch] (normal)
+* Consider individual data types for CFunEqCan etc
 
-Derived equalities   fmv1 ~ Maybe a, fmv2 ~ Maybe b
-   indexed-types/should_fail     T4093a [stderr mismatch] (normal)
+* Collapse CNonCanonical and CIrredCan
+  * RAE: I think it would be better to split off CNonCanonical into its own
+    type, and remove it completely from Ct. Then, we would keep CIrredCan
 
-Not sure
-   indexed-types/should_fail     ExtraTcsUntch [stderr mismatch] (normal)
+The coercion solver
+~~~~~~~~~~~~~~~~~~~~
+Our hope. In GHC currently drawn from {G,W,D}, but with the coercion
+solver the flavours become pairs
+    { (k,l) | k <- {G,W,D}, l <- {Nom,Rep} }
 
-Order of finding iprovements
-   typecheck/should_compile      TcTypeNatSimple [exit code non-0] (normal)
+But can
+      a -(G,R)-> Int
+rewrite
+      b -(G,R)-> T a
+?
 
+Well, it depends on the roles at which T uses its arguments :-(.
+So it may not be enough just to look at (flavour,role) pairs?
 
+RAE: This is true, but it is taken care of by being careful in the
+flattening algorithm. Flattening (T a) looks at the roles of
+T's parameters, and chooses the role for flattening `a` appropriately.
+This is why there must be the [Role] parameter to flattenMany.
+Of course, this non-uniform rewriting may gum up the proof works.
 
------------------