[Template-haskell] Dyamic scoping question
Bryn Keller
xoltar at xoltar.org
Mon Nov 1 14:44:04 EST 2004
Simon Peyton-Jones wrote:
>Here's your program boiled down a bit
> foo = 3
> baz = $(varE ("fo" ++ "o"))
>
>Like any Haskell compiler, GHC does dependency analysis, and type-checks
>in that order. There no way for it to see that 'baz' depends on 'foo',
>so it may well typecheck the definition of baz before that of foo. I
>haven't actually run your example, but I bet that's what's happening.
>"-ddump-rn" would tell you, because it shows the code after dependency
>analysis.
>
>
Ah, thanks, that makes a lot of sense. In fact, -ddump-rn reveals that's
exactly what's happening.
>I wonder if others have tripped over this. There is a tension between
>dynamic scope and dependency analysis (which is required for type
>checking) that's hard to resolve. For example, you probably want the
>example to work even if the definition of 'foo' is after that of 'baz';
>at least that's the standard Haskell story.
>
>I suppose a workaround is to put 'foo' in another module, but it's not
>nice.
>
>
I just rephrased the code in such a way that I didn't need that dynamic
scoping anymore. I don't think using modules to constrain dependency
analysis for TH is such a bad idea, though. Particularly if there were
some syntax for creating said modules in the same file... That's a
discussion for another day, though. Thanks for the help!
Bryn
More information about the template-haskell
mailing list