Template Haskell crashes unexpectedly...

Arie Peterson ariep at xs4all.nl
Mon Aug 21 11:08:31 EDT 2006

Hello Brian,

> [snip]
>         getInfo :: Q Info
>         getInfo = reify (mkName "Car")
> [snip]
>             -- Crashes if I try to print out the info
>             -- info <- runQ getInfo
>             -- putStrLn (pprint info)
> [snip]
> The example from the paper works fine with the few minor adjustements ie
> Expr --> ExpQ, lift --> stringE. However if I try and obtain the Info it
> compiles but then crashes at runtime (using ghc 6.4.2 on Windows).
> Any ideas? (Perhaps because the type doesn't exist - yet the first call to
> runQ (printf...) *does* work at runtime)

I seem to remember that 'reify' cannot be run in the IO monad. IIRC ghci
gives a nice error message saying this, so perhaps you can try to execute
'main' from within ghci to corroborate my suspicion.

> Also, I'm puzzled by the type of reify, because the name "Car" above
> should
> surely be both a TyConI and a DataConI so how does this function decide
> which to return the info about? I expected an extra parameter to determine
> what namespace to look the name up in.

The preferred way to refer to names that are in scope is by using the
quotation mechanism:

  'getName    is the name of the function 'getName'
  ''Object    is the name of the type 'Object'

This also makes the distinction you rightly wanted.




Mr. Pelican Shit may be Willy.


More information about the Glasgow-haskell-users mailing list