[Haskell-cafe] Domain specific error messages
Simon Peyton Jones
simonpj at microsoft.com
Fri Feb 6 10:10:06 UTC 2015
Yes, the centralisation of many type errors to TcErrors is a huge win. It would be massive task to turn *all* of GHC's errors into a data type, but the ones in TcErrors ought not to be too hard.
Simon
| -----Original Message-----
| From: Haskell-Cafe [mailto:haskell-cafe-bounces at haskell.org] On Behalf
| Of Adam Gundry
| Sent: 06 February 2015 07:53
| To: Haskell Cafe
| Subject: Re: [Haskell-cafe] Domain specific error messages
|
| [Re-sending to haskell-cafe since I used the wrong From address...]
|
| This is something that has been on my mind for a while, particularly
| following discussions at the last ICFP and prompted by the work on
| typechecker plugins in GHC [1]. I think I see a way to proceed, though
| I don't know whether I will have time to implement it for a while. I'd
| be interested to hear about other approaches.
|
| Suppose we define an ADT representation of all the typechecker error
| messages, e.g. something roughly like
|
| data TcError = CustomError String
| | CouldNotUnify Type Type
| | NoClassInstance ...
|
| In GHC all the relevant messages are generated in the
| typechecker/TcErrors module, so this shouldn't be too hard to arrange.
| Now we can extend plugins with the ability to supply a function
|
| tcPluginAdjustErrors :: [TcError] -> TcPluginM [TcError]
|
| and run the plugged-in function between generating and reporting the
| errors. Thus a library defining a DSL could also provide a plugin to
| supply more informative error messages.
|
| This is a fairly quick-and-dirty approach, because the plugin would be
| quite tightly coupled to GHC, even though it could be written and
| distributed separately. But it might be one way of making progress.
| (It also occurs to me that such an ADT might allow GHC to define a
| machine-readable serialisable format for its error messages, to allow
| post-processing by external programs.)
|
| Adam
|
| [1] https://ghc.haskell.org/trac/ghc/wiki/Plugins/TypeChecker
|
|
| On 05/02/15 09:54, Corentin Dupont wrote:
| > Hi all,
| > I have been very interested by this discussion when Alberto started
| it.
| > As there been any progress?
| > The problem is very acute in the Nomyx game I'm developing
| > (www.nomyx.com <http://www.nomyx.com>).
| > The game is based on a DSL, it's working well, but at the moment
| only
| > expert Haskell developers can play...
| > I think cryptic error messages is part of the problem.
| > How to improve that?
| > For example, a common error message is the following:
| >
| > Won't Compile
| > <interactive>:5:28:
| > Couldn't match type ''NoEffect' with ''Effect'
| > Expected type: Exp Effect ()
| > Actual type: Exp NoEffect ()
| > In the expression: e_1
| > In the expression: (let e_1 = do { ... } in e_1) :: Exp Effect
| ()
| >
| > It's not so helpful and exposing Nomyx internals.
| > A better error message would be to hint that the player forgot a
| "liftEffect" instruction.
| >
| > The only quick-and-dirty solution I see is to pattern-match for it
| and display an additional hint line...
|
|
|
| --
| Adam Gundry, Haskell Consultant
| Well-Typed LLP, http://www.well-typed.com/
| _______________________________________________
| Haskell-Cafe mailing list
| Haskell-Cafe at haskell.org
| http://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe
mailing list