[Haskell-cafe] Domain specific error messages

Alejandro Serrano Mena trupill at gmail.com
Fri Feb 6 08:23:44 UTC 2015


I think this is very similar to what Idris supports for reflecting on
errors: http://www.itu.dk/people/drc/drafts/error-reflection-submission.pdf

2015-02-06 8:53 GMT+01:00 Adam Gundry <adam at well-typed.com>:

> [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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20150206/4166c8e2/attachment.html>


More information about the Haskell-Cafe mailing list