[Template-haskell] Re: template-haskell names in 6.3

Simon Peyton-Jones simonpj at microsoft.com
Tue Dec 21 05:19:08 EST 2004


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 at haskell.org
[mailto:template-haskell-bounces at haskell.org] On
| Behalf Of Keean Schupke
| Sent: 21 December 2004 10:06
| To: Simon Peyton-Jones
| Cc: template-haskell at 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 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
| >
| >
| 
| _______________________________________________
| 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