Because they the two can behave differently in different contexts. It's like saying why doesn't 1==2 because in the context (\x. x>10) both give False! I feel I am missing the point you are trying to make. I thought I had it when I suggested mkQualName, and you said "that's exactly what I want". But you can define mkQualName easily: mkQualName m s = mkName (m ++ "." ++ s). Why don't you give a complete (but small) example of what you are trying to do? Simon | -----Original Message----- | From: Keean Schupke [mailto:k.schupke@imperial.ac.uk] | Sent: 21 December 2004 10:48 | To: Simon Peyton-Jones | Cc: template-haskell@haskell.org | Subject: Re: [Template-haskell] Re: template-haskell names in 6.3 | | 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 | > | >