Last mail seemed to get lost (think I forgot to CC it to the list): would this work with: $(something [d| f a = a + 1 |]) Such that I can reference the reified type of 'f' from inside 'something'. 'something' would be imported from another file. I am using ghc-6.4 Keean. Sean Seefried wrote:
On 18/02/2005, at 8:11 PM, Keean Schupke wrote:
Is it possible to get at type information from TH? I am thinking of something like the following:
f a = a + 1
{- ghc derives the type: f :: Integral a => a -> a -}
Can I get at this derives type information? It would be very useful for the project I am working on... can I just reify the type of the function?
The answer to this question is a little tricky - it's yes with a few caveats. Firstly, the Q monad can be "run" in two contexts - within the IO monad and with in the TcM monad of the GHC compiler. You can't you `reify' to get type information in the former context. Secondly, you can only reify the type of something that has been imported from another module. No go on the reifying something declared within the module you're reifying in.
I have two pieces of sample code that demonstrate the Q monad being run within the TcM monad and within the IO monad. The first one works, the second doesn't. They are attached.
These built in an old version of GHC 6.3. They should compile and run in GHC 6.5 without *too* much difficulty although I haven't tested it.
Cheers,
Sean