diff options
author | Simon Peyton Jones <simonpj@microsoft.com> | 2017-03-10 11:46:50 +0000 |
---|---|---|
committer | Simon Peyton Jones <simonpj@microsoft.com> | 2017-03-10 16:05:21 +0000 |
commit | 48d1866e9051e52b80c9c88547bd66d66483f1d5 (patch) | |
tree | 72047939e1bad05062f7518db97b6c999d32c948 /testsuite/tests/ado | |
parent | 7e96526ac2ef5987ecb03217d3d616b6281c1441 (diff) | |
download | haskell-48d1866e9051e52b80c9c88547bd66d66483f1d5.tar.gz |
Improve error messages for skolems
In error messages like this
• Couldn't match type ‘c’ with ‘f0 (a -> b)’
‘c’ is a rigid type variable bound by
the type signature for:
f :: ((a -> b) -> b) -> forall c. c -> a
we need to take case both to actually show that 'forall c',
and to make sure that its name lines with the 'c' in the
error message.
This has been shaky for some time, and this commit puts it on solid
ground. See TcRnTypes: Note [SigSkol SkolemInfo]
The main changes are
* SigSkol gets an extra field that records the way in which the
type signature was skolemised.
* The type in SigSkol is now the /un/-skolemised version
* pprSkolemInfo uses the info to make the tidy type line up
nicely
Lots of error message wibbles!
Diffstat (limited to 'testsuite/tests/ado')
-rw-r--r-- | testsuite/tests/ado/ado005.stderr | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/testsuite/tests/ado/ado005.stderr b/testsuite/tests/ado/ado005.stderr index 90d0b023bf..a7984b4757 100644 --- a/testsuite/tests/ado/ado005.stderr +++ b/testsuite/tests/ado/ado005.stderr @@ -1,21 +1,25 @@ ado005.hs:8:3: error: - Could not deduce (Monad f) arising from a do statement - from the context: Applicative f - bound by the type signature for: - test :: Applicative f => (Int -> f Int) -> f Int - at ado005.hs:6:1-48 - Possible fix: - add (Monad f) to the context of - the type signature for: - test :: Applicative f => (Int -> f Int) -> f Int - In a stmt of a 'do' block: x <- f 3 - In the expression: - do x <- f 3 - y <- f x - return (x + y) - In an equation for ‘test’: - test f - = do x <- f 3 - y <- f x - return (x + y) + • Could not deduce (Monad f) arising from a do statement + from the context: Applicative f + bound by the type signature for: + test :: forall (f :: * -> *). + Applicative f => + (Int -> f Int) -> f Int + at ado005.hs:6:1-48 + Possible fix: + add (Monad f) to the context of + the type signature for: + test :: forall (f :: * -> *). + Applicative f => + (Int -> f Int) -> f Int + • In a stmt of a 'do' block: x <- f 3 + In the expression: + do x <- f 3 + y <- f x + return (x + y) + In an equation for ‘test’: + test f + = do x <- f 3 + y <- f x + return (x + y) |