[Template-haskell] Re: template-haskell names in 6.3
Keean Schupke
k.schupke at imperial.ac.uk
Tue Dec 21 05:05:58 EST 2004
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 at haskell.org
>[mailto:template-haskell-bounces at haskell.org] On
>| Behalf Of Keean Schupke
>| Sent: 03 December 2004 14:38
>| To: Simon Peyton-Jones
>| Cc: template-haskell at 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 at haskell.org
>| http://www.haskell.org/mailman/listinfo/template-haskell
>
>
More information about the template-haskell
mailing list