
| Thanks. That helps but I still don't understand why the calls are
| delegated to template-haskell library. Couldn't all of this be done
| locally?
No. If you have
f :: Int -> Q Exp
then f is a function that, when run, produces a data structure that is the syntax tree (in the data type of Language.Haskell.TH) of some expression.
Later, in some other module entirely, you may call f, thus
foo = $(f 5)
Now GHC dynamically links the module that defines f, executes f's code, which returns a syntax tree (in the data type of Language.Haskell.TH). This is converted to HsSyn and replaces the $(f 5).
So the code for f must be code that, when executed, produces a data structure. The business of DsMeta is to produce such code.
If, once you grok this, you'd like to add a page to the GHC Commentary, to explain it, that would be great. It does take a while to get your head around.
Simon
| -----Original Message-----
| From: ghc-devs [mailto:ghc-devs-bounces@haskell.org] On Behalf Of Jan
| Stolarek
| Sent: 17 December 2014 19:34
| To: Richard Eisenberg
| Cc: ghc-devs@haskell.org
| Subject: Re: Understanding DsMeta module
|
| Thanks. That helps but I still don't understand why the calls are
| delegated to template-haskell library. Couldn't all of this be done
| locally?
|
| Janek
|
| Dnia środa, 17 grudnia 2014, Richard Eisenberg napisał:
| > On Dec 17, 2014, at 12:29 PM, Jan Stolarek