[GHC] #8809: Prettier error messages?
GHC
ghc-devs at haskell.org
Wed Jul 1 16:56:09 UTC 2015
#8809: Prettier error messages?
-------------------------------------+-------------------------------------
Reporter: joelteon | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.9
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by bgamari):
Replying to [comment:6 diatchki]:
> It would be nice if we could refactor GHC so that error messages are
kept in some sort of structured format with all information that might be
relevant. Then, when printed we could have flags to specify how to render
the errors (e.g., "machine form", which would be good for external tools,
such as IDEs; or "human form", which could have the nice formatting in the
example).
>
Indeed this would be nice, however placing all of the information
necessary for an error comes at a cost. I think Simon PJ articulates this
fairly well in this [[comment
https://www.reddit.com/r/haskell/comments/3bnpa7/compiler_errors_for_humans/csoksqg]]
on the Reddit post mentioned by goldfire (reproduced here for archival
sake),
>Building error messages from strings (or in GHC's case `SDoc`s) is pretty
lame because you can write them but not analyse them. The "obvious"
alternative is to use a huge algebraic data type with one constructor for
each error message that GHC can produce. Then you generate the constructor
in one place, and render it into a string somewhere else, perhaps in more
than one way. I am not optimistic about this, because it puts a big
central road-block in the way of generating error messages, and splits the
work into two different places (the renderer and the generator). That's an
advantage in some ways, but there are so darn MANY different error
messages that it feels far too centralised and brittle to me.
>
>Idris does something in the middle. As I understand David Cristiansen,
they have an abstract type a bit like `SDoc`, but it is much richer than
GHC's `SDoc`. They can certainly do colour (and `SDoc`s should too). And
you can attach auxilary info to the `SDoc` so that when rendered in a web
browser you get popup hints. This would all be very feasible in GHC, if
someone did the work.
>
>Another big issue is having enough information to hand when you are
generating the message in the first place. Attaching provenance
information to type constraints is a huge help (as the Elm article
suggests) which GHC does, but not well enough. For example Lennart
Augustsson gave a talk at the Haskell Implementors workshop last year with
some simple suggestions that work really well in his Mu compiler. Jurriaan
Hage and his colleages at Utrecht have a lot of experience of this kind of
thing with Helium. GHC is better placed to do this now than it has ever
been before, because the type inference engine is increasingly based on
solving constraints. Almost all type errors are generated in a single
module, `TcErrors`, if you are interested to look there.
>
>I'm keen to make sure that running GHC in batch mode sending output to a
text file or dumb terminal gives something useful. I don't want to require
a snazzy IDE or emacs mode. But I'd love to be able to exploit one if it
was available.
The proposal I lay out in comment:3 was an attempt to find a way to
implement the alternative that Simon describes above while minimizing the
impact of the change.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8809#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list