Caret diagnostics for GADT constructor error message don't span the whole constructor
Inspecting the caret diagnostics in the error message for this program:
{-# LANGUAGE GADTs #-}
module Bug where
data Foo1 where
MkFoo1 :: Bool
newtype Foo2 where
MkFoo2 :: Foo2
$ /opt/ghc/8.2.2/bin/ghc Bug.hs
[1 of 1] Compiling Bug ( Bug.hs, Bug.o )
Bug.hs:5:3: error:
• Data constructor ‘MkFoo1’ returns type ‘Bool’
instead of an instance of its parent type ‘Foo1’
• In the definition of data constructor ‘MkFoo1’
In the data type declaration for ‘Foo1’
|
5 | MkFoo1 :: Bool
| ^
Bug.hs:8:3: error:
• The constructor of a newtype must have exactly one field
but ‘MkFoo2’ has none
• In the definition of data constructor ‘MkFoo2’
In the newtype declaration for ‘Foo2’
|
8 | MkFoo2 :: Foo2
| ^
We notice something fishy: the carets don't span the entirey of the constructor! Contrast this with the carets for the error message in this program:
{-# LANGUAGE GADTs #-}
module Bug where
data Foo where
MkFoo, MkFoo :: Foo
$ /opt/ghc/8.2.2/bin/ghc Bug.hs
[1 of 1] Compiling Bug ( Bug.hs, Bug.o )
Bug.hs:5:3: error:
Multiple declarations of ‘MkFoo’
Declared at: Bug.hs:5:3
Bug.hs:5:3
|
5 | MkFoo, MkFoo :: Foo
| ^^^^^^^^^^^^^^^^^^^
Where the carets span everything that is relevant.
I know what is causing this: patch incoming.
Trac metadata
Trac field | Value |
---|---|
Version | 8.2.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |