[Template-haskell] RE: Template Haskell...
Simon Peyton-Jones
simonpj at microsoft.com
Thu Oct 30 09:22:08 EST 2003
Our plan for error messages was
failWith :: String -> Q ()
Would that do? In this way you can format your own error
message. So if you had
f :: Int -> Q Exp
f 0 = failWith "Postitive n required
f n = [| \x -> x+n |]
then the splice
....$(f 0).....
would elicit the error message
Foo.hs:8: Error in splice $(f 0):
Positive n required
Is that what you want?
Simon
| -----Original Message-----
| From: Alastair Reid [mailto:alastair at reid-consulting-uk.ltd.uk]
| Sent: 29 October 2003 21:47
| To: Simon Peyton-Jones; template-haskell at haskell.org
| Subject: Re: [Template-haskell] RE: Template Haskell...
|
| More things for the TH wish-list:
|
| I've been using TH to create language extensions.
| Unfortunately, the error messages are horrible because:
|
| 1) They contain a header generated by TH.
| This contains useful information like line numbers but it
| talks about TH instead of talking about my extension.
|
| I want to be able to format the error message header myself using
| information like filename and line number that TH provides to me.
|
| 2) They contain a body generated by TH.
| If the code my language extension generates is wrong,
| there's virtually no chance that any user (myself included)
| will figure it out from seeing the machine-generated Haskell
| code or being given the type error message.
| Better just to say there is a problem and leave it at that.
|
| I want to be able to construct the error message body myself
| using information like the expression being spliced before
| evaluation, after evaluation and the error message produced.
|
|
| A related issue is that I generate files corresponding to each TH
module I
| compile. If ghc is producing a file called foo/bar.o, I'd like the
name of
| the file to be foo/bar_stub.o. For this sort of application, I need
access
| to the name of the input and output filenames.
|
| Finally, can you drop the 'tick' from variable names produced using
gensym?
| If you'd used underscore, the variable name would be a legal C
identifier
| too. (Ok, so this is a bit specialized but it's very easy to do.)
|
| --
| Alastair Reid www.haskell-consulting.com
|
More information about the template-haskell
mailing list