RE: [Template-haskell] Re: template-haskell names in 6.3
No, certainly not. ''Test :: Name is a lexically-scoped Name, indissolubly connected to whatever Test means in the original lexical scope it appeared in mkName "Foo.Test" :: Name is a dynamically-scoped Name, captured by whatever context it's spliced into. They aren't the same, and shouldn't be! Simon | -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On | Behalf Of Keean Schupke | Sent: 21 December 2004 10:06 | To: Simon Peyton-Jones | Cc: template-haskell@haskell.org | Subject: Re: [Template-haskell] Re: template-haskell names in 6.3 | | I think I am already using that... I wasn't sure if the 'module-part' of the | name was the same as in a global name generated from ''... is: | | module Foo | data Test | | mkName "Foo.Test" == ''Test -- is this true? | | Keean | | Simon Peyton-Jones wrote: | | >Keean | > | >I was half way through implementing this when I realised it's there | >already. If you say | > | > mkName "Foo.baz" | > | >you'll get a dynamically scoped qualified name, just as you want. | > | >Is that OK? | > | >Simon | > | >| -----Original Message----- | >| From: template-haskell-bounces@haskell.org | >[mailto:template-haskell-bounces@haskell.org] On | >| Behalf Of Keean Schupke | >| Sent: 03 December 2004 14:38 | >| To: Simon Peyton-Jones | >| Cc: template-haskell@haskell.org | >| Subject: Re: [Template-haskell] Re: template-haskell names in 6.3 | >| | >| Simon Peyton-Jones wrote: | >| | >| >do you mean | >| > n <- newName s | >| >or | >| > let n = mkName s | >| >? | >| > | >| > | >| I mean the latter... or perhaps: "n <- return $ mkName s"... | >| | >| >If the latter, you will get | >| > data Foo = Foo Foo | >| > | >| >... and then I see what you want. You want a version of mkName that | >is | >| >like giving a qualified name in Haskell. It's dynamically scoped | >just | >| >like mkName, but it obeys the usual rules for qualified names in | >| >Haskell. | >| > | >| >To be totally explicit, suppose I have | >| > | >| > foo = [| mkQualName "Foo" "baz" |] | >| > | >| >then if I call foo thus | >| > | >| > wibble = \baz -> $foo | >| > | >| >the $foo splice will expand to "Foo.baz", and that won't see the | >\baz; | >| >it'll see whatever Foo.baz is in scope. | >| > | >| > | >| This is exactly what I am after... | >| | >| >Is that what you seek? I can see it's reasonable. I'd need to add | >| > | >| > mkQualName :: String -> String -> Name | >| > | >| >That'd mean an extra form of Name. Currently, if you say | >| > 'Foo.baz | >| >you'll get a Name whose nameModule isn't necessarily Foo... it'll be | >the | >| >module that baz was actually defined in. | >| > | >| > | >| I'll leave that up to you, I don't mind if this translation happens, | >as | >| long as it refers to the Foo.baz in dynamic scope the actuall name | >| can change. | >| | >| Keean | >| _______________________________________________ | >| template-haskell mailing list | >| template-haskell@haskell.org | >| http://www.haskell.org/mailman/listinfo/template-haskell | > | > | | _______________________________________________ | template-haskell mailing list | template-haskell@haskell.org | http://www.haskell.org/mailman/listinfo/template-haskell
Okay but:
module Foo where data Test
module Bar import Foo
test = (''Test == mkName "Foo.Test")
Test (in this scope) is Foo.Test, so why shouldn't it equal mkName "Foo.Test" ? Keean. Simon Peyton-Jones wrote:
No, certainly not.
''Test :: Name is a lexically-scoped Name, indissolubly connected to whatever Test means in the original lexical scope it appeared in
mkName "Foo.Test" :: Name is a dynamically-scoped Name, captured by whatever context it's spliced into.
They aren't the same, and shouldn't be!
Simon
| -----Original Message----- | From: template-haskell-bounces@haskell.org [mailto:template-haskell-bounces@haskell.org] On | Behalf Of Keean Schupke | Sent: 21 December 2004 10:06 | To: Simon Peyton-Jones | Cc: template-haskell@haskell.org | Subject: Re: [Template-haskell] Re: template-haskell names in 6.3 | | I think I am already using that... I wasn't sure if the 'module-part' of the | name was the same as in a global name generated from ''... is: | | module Foo | data Test | | mkName "Foo.Test" == ''Test -- is this true? | | Keean | | Simon Peyton-Jones wrote: | | >Keean | > | >I was half way through implementing this when I realised it's there | >already. If you say | > | > mkName "Foo.baz" | > | >you'll get a dynamically scoped qualified name, just as you want. | > | >Is that OK? | > | >Simon | > | >| -----Original Message----- | >| From: template-haskell-bounces@haskell.org | >[mailto:template-haskell-bounces@haskell.org] On | >| Behalf Of Keean Schupke | >| Sent: 03 December 2004 14:38 | >| To: Simon Peyton-Jones | >| Cc: template-haskell@haskell.org | >| Subject: Re: [Template-haskell] Re: template-haskell names in 6.3 | >| | >| Simon Peyton-Jones wrote: | >| | >| >do you mean | >| > n <- newName s | >| >or | >| > let n = mkName s | >| >? | >| > | >| > | >| I mean the latter... or perhaps: "n <- return $ mkName s"... | >| | >| >If the latter, you will get | >| > data Foo = Foo Foo | >| > | >| >... and then I see what you want. You want a version of mkName that | >is | >| >like giving a qualified name in Haskell. It's dynamically scoped | >just | >| >like mkName, but it obeys the usual rules for qualified names in | >| >Haskell. | >| > | >| >To be totally explicit, suppose I have | >| > | >| > foo = [| mkQualName "Foo" "baz" |] | >| > | >| >then if I call foo thus | >| > | >| > wibble = \baz -> $foo | >| > | >| >the $foo splice will expand to "Foo.baz", and that won't see the | >\baz; | >| >it'll see whatever Foo.baz is in scope. | >| > | >| > | >| This is exactly what I am after... | >| | >| >Is that what you seek? I can see it's reasonable. I'd need to add | >| > | >| > mkQualName :: String -> String -> Name | >| > | >| >That'd mean an extra form of Name. Currently, if you say | >| > 'Foo.baz | >| >you'll get a Name whose nameModule isn't necessarily Foo... it'll be | >the | >| >module that baz was actually defined in. | >| > | >| > | >| I'll leave that up to you, I don't mind if this translation happens, | >as | >| long as it refers to the Foo.baz in dynamic scope the actuall name | >| can change. | >| | >| Keean | >| _______________________________________________ | >| template-haskell mailing list | >| template-haskell@haskell.org | >| http://www.haskell.org/mailman/listinfo/template-haskell | > | > | | _______________________________________________ | template-haskell mailing list | template-haskell@haskell.org | http://www.haskell.org/mailman/listinfo/template-haskell
participants (2)
-
Keean Schupke -
Simon Peyton-Jones