[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