summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_fail/mc25.stderr
diff options
context:
space:
mode:
authorSimon Peyton Jones <simonpj@microsoft.com>2015-04-29 13:43:09 +0100
committerSimon Peyton Jones <simonpj@microsoft.com>2015-04-29 15:05:44 +0100
commita1275a762ec04c1159ae37199b1c8f998a5c5499 (patch)
tree6d01de796910a7857c5f91661a40592f67d62090 /testsuite/tests/typecheck/should_fail/mc25.stderr
parentd9bb0ee78b2104bd5c71508080d068804086ae84 (diff)
downloadhaskell-a1275a762ec04c1159ae37199b1c8f998a5c5499.tar.gz
Improve improvement in the constraint solver
This regrettably-big patch substantially improves the way in which "improvement" happens in the constraint solver. It was triggered by trying to crack Trac #10009, but it turned out to solve #10340 as well. The big picture, with several of the trickiest examples, is described in Note [The improvement story] in TcInteract. The major change is this: * After solving we explicitly try "improvement", by - making the unsolved Wanteds into Deriveds - allowing Deriveds to rewrite Deriveds This more aggressive rewriting "unlocks" some extra guess-free unifications. * The main loop is in TcInteract.solveSimpleWanteds, but I also ended up refactoring TcSimplify.simpl_loop, and its surrounding code. Notably, any insolubles from the Givens are pulled out and treated separately, rather than staying in the inert set during the solveSimpleWanteds loop. There are a lot of follow-on changes * Do not emit generate Derived improvements from Wanteds. This saves work in the common case where they aren't needed. * For improvement we should really do type-class reduction on Derived constraints in doTopReactDict. That entailed changing the GenInst constructor a bit; a local and minor change * Some annoying faffing about with dropping derived constraints; see dropDerivedWC, dropDerivedSimples, dropDerivedInsols, and their Notes. * Some substantial refactoring in TcErrors.reportWanteds. This work wasn't strictly forced, but I got sucked into it. All the changes are in TcErrors. * Use TcS.unifyTyVar consistently, rather than setWantedTyBind, so that unifications are properly tracked. * Refactoring around solveWantedsTcM, solveWantedsAndDrop. They previously guaranteed a zonked result, but it's more straightforward for clients to zonk.
Diffstat (limited to 'testsuite/tests/typecheck/should_fail/mc25.stderr')
-rw-r--r--testsuite/tests/typecheck/should_fail/mc25.stderr4
1 files changed, 2 insertions, 2 deletions
diff --git a/testsuite/tests/typecheck/should_fail/mc25.stderr b/testsuite/tests/typecheck/should_fail/mc25.stderr
index 83fe1301d6..ec88439e89 100644
--- a/testsuite/tests/typecheck/should_fail/mc25.stderr
+++ b/testsuite/tests/typecheck/should_fail/mc25.stderr
@@ -1,5 +1,5 @@
-mc25.hs:9:10:
+mc25.hs:9:10: error:
No instance for (Functor t1) arising from a use of ‘fmap’
Possible fix:
add (Functor t1) to the context of
@@ -9,7 +9,7 @@ mc25.hs:9:10:
In a stmt of a monad comprehension: then group by x using take
In the expression: [x | x <- [1 .. 10], then group by x using take]
-mc25.hs:9:46:
+mc25.hs:9:46: error:
Couldn't match type ‘a -> t’ with ‘Int’
Expected type: (a -> t) -> [a] -> [t1 a]
Actual type: Int -> [t1 a] -> [t1 a]