Another thing that I'm really missing with the current Template Haskell is a "decent" way to pass state between different meta-functions. Let me provide a few examples of the things I want to do:
[...]
Manuel Chakravarty provided me with a nice workaround involving the use of (unsafePerformIO $ newIORef ...) global variables from the Q monad.
This is an absolutely essential feature. It's a critical part of Template Greencard. Unfortunately, the workaround (which is the same one I use) doesn't work with ghc --make because the global variable doesn't get reset between modules. So it tends to contain information from compiling whichever random set of modules needed recompiling. The workaround for this is not to use --make. It would also be nice to be able to pass state _between_ modules. For example, in Template Greencard, I want to declare Data Interface Schemes (rules for how to marshal objects to/from C) in one module and use them in another module. This would, presumably, have to be done by providing a hook where my TH code could provide things to include in .hi files and provide a way for my TH code to ask ghc for them back. (This may be the same thing that Wolfgang is asking for.) -- Alastair Reid www.haskell-consulting.com