Hello, reifyDecl and reifyType seem to be recognized as identifiers and not as part of TH syntax by GHC 6.7.20070903. Take, for example, the following code: {-# LANGUAGE TemplateHaskell #-} x = reifyDecl () If I compile this (with or without -fth), I get the error message “Not in scope: `reifyDecl'”. What’s wrong here? Best wishes, Wolfgang
'reifyDecl' is not a language construct; it's a function. You need to import Language.Haskell.TH to bring it into scope. If the user manual suggests otherwise, could you suggest improved wording? Simon | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On Behalf Of | Wolfgang Jeltsch | Sent: 08 September 2007 23:27 | To: template-haskell@haskell.org | Subject: [Template-haskell] reifyDecl and reifyType not working | | Hello, | | reifyDecl and reifyType seem to be recognized as identifiers and not as part | of TH syntax by GHC 6.7.20070903. Take, for example, the following code: | | {-# LANGUAGE TemplateHaskell #-} | | x = reifyDecl () | | If I compile this (with or without -fth), I get the error message “Not in | scope: `reifyDecl'”. What’s wrong here? | | Best wishes, | Wolfgang | _______________________________________________ | template-haskell mailing list | template-haskell@haskell.org | http://www.haskell.org/mailman/listinfo/template-haskell
Am Montag, 10. September 2007 14:18 schrieb Ian Lynagh:
On Mon, Sep 10, 2007 at 08:59:45AM +0100, Simon Peyton-Jones wrote:
'reifyDecl' is not a language construct; it's a function. You need to import Language.Haskell.TH to bring it into scope.
It's also just called reify these days.
This is not what the GHC User’s Guide talks about when discussing reifyDecl and reifyType. In an expression reifyDecl A, A has to be a type constructor or a class, and in an expression reifyType a, a has to be an identifier. So reifyDecl and reifyType cannot be functions but must be language constructs. On the other hand, reify expects a value of type Name as an argument. The problem is that I wanted to use reifyDecl as a workaround to create values of type Name. The Template Haskell library doesn’t seem to provide a way to create a Name value which always refers to the same entity, regardless of the splice where it is used. So I wanted to use workarounds like this: className :: Name ClassD _ className _ _ _ = reifyDecl Class Best wishes, Wolfgang
On Mon, Sep 10, 2007 at 06:57:09PM +0200, Wolfgang Jeltsch wrote:
Am Montag, 10. September 2007 14:18 schrieb Ian Lynagh:
On Mon, Sep 10, 2007 at 08:59:45AM +0100, Simon Peyton-Jones wrote:
'reifyDecl' is not a language construct; it's a function. You need to import Language.Haskell.TH to bring it into scope.
It's also just called reify these days.
of type Name. The Template Haskell library doesn’t seem to provide a way to create a Name value which always refers to the same entity, regardless of the splice where it is used. So I wanted to use workarounds like this:
className :: Name ClassD _ className _ _ _ = reifyDecl Class
You can get names with the ' and '' syntax: $ ghci -fth Prelude> ''Eq GHC.Base.Eq Prelude> 'id GHC.Base.id Thanks Ian
Am Montag, 10. September 2007 22:13 schrieb Ian Lynagh:
On Mon, Sep 10, 2007 at 06:57:09PM +0200, Wolfgang Jeltsch wrote:
Am Montag, 10. September 2007 14:18 schrieb Ian Lynagh:
On Mon, Sep 10, 2007 at 08:59:45AM +0100, Simon Peyton-Jones wrote:
'reifyDecl' is not a language construct; it's a function. You need to import Language.Haskell.TH to bring it into scope.
It's also just called reify these days.
of type Name. The Template Haskell library doesn’t seem to provide a way to create a Name value which always refers to the same entity, regardless of the splice where it is used. So I wanted to use workarounds like this:
className :: Name ClassD _ className _ _ _ = reifyDecl Class
You can get names with the ' and '' syntax:
Oh, I didn’t know about this syntax. Is this documented somewhere?
[…]
Best wishes, Wolfgang
Hello Wolfgang, Tuesday, September 11, 2007, 1:59:15 AM, you wrote:
'reifyDecl' is not a language construct; it's a function. You need
You can get names with the ' and '' syntax:
Oh, I didn’t know about this syntax. Is this documented somewhere?
afair, reifyDecl was described in the first TH paper while reify and '/'' in the second one: http://www.haskell.org/ghc/docs/papers/th2.ps you may also look at http://www.haskell.org/bz/thdoc.htm (written by me) which describes whole TH -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com
I'll improve the documentation too S | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On Behalf Of | Bulat Ziganshin | Sent: 11 September 2007 07:54 | To: Wolfgang Jeltsch | Cc: template-haskell@haskell.org | Subject: Re[2]: [Template-haskell] reifyDecl and reifyType not working | | Hello Wolfgang, | | Tuesday, September 11, 2007, 1:59:15 AM, you wrote: | >> > > > 'reifyDecl' is not a language construct; it's a function. You need | | >> You can get names with the ' and '' syntax: | | > Oh, I didn’t know about this syntax. Is this documented somewhere? | | afair, reifyDecl was described in the first TH paper while reify and | '/'' in the second one: http://www.haskell.org/ghc/docs/papers/th2.ps | | you may also look at http://www.haskell.org/bz/thdoc.htm (written by me) | which describes whole TH | | -- | Best regards, | Bulat mailto:Bulat.Ziganshin@gmail.com | | _______________________________________________ | template-haskell mailing list | template-haskell@haskell.org | http://www.haskell.org/mailman/listinfo/template-haskell
participants (4)
-
Bulat Ziganshin -
Ian Lynagh -
Simon Peyton-Jones -
Wolfgang Jeltsch