[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