[Haskell-cafe] Locate errors in TH for Haskell code

Richard Eisenberg lists at richarde.dev
Wed Nov 10 19:26:09 UTC 2021


Hi Anton,

I don't think you're going to be able to do what you want here. :(

Template Haskell has no facility to keep track of locations of bits of code. So, when you've processed your Exp and then spliced it in, there are no locations to record, other than the location of the entire splice (which is poor, I know).

This has been requested before: https://gitlab.haskell.org/ghc/ghc/-/issues/10330. The problem is that the fix is really quite invasive (it would require adding location information to every constructor in TH, affecting every TH user), and so we've been hesitant to plow forward. If you were to collect a chorus of voices who all wanted this (and were willing to help flesh out the design), it's something we can do -- but I'd want to know it was a popular direction before imposing it on every TH user out there.

Richard

> On Nov 6, 2021, at 5:48 AM, Anton Kholomiov <anton.kholomiov at gmail.com> wrote:
> 
> I have a task to convert one Haskell expression to another.
> And I'd like to report errors properly.
> 
> [interpret|   -- error reported here
>    valid haskell code
>    invalid code           <- error
> |]
> 
> I can parse it with haskell-src-exts or haskell-src-meta.
> but if I have error in the code (type-check) error is positioned on the first line of the QQ-expression.
> 
> Do you know is it possible to report error at the line where it has happened or
> to keep original source code location in the Exp.
> 
> In the function I do transformation Exp -> Exp.
> 
> Or maybe there is a better way to do it instead of QQ?
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.



More information about the Haskell-Cafe mailing list