let { a = (e1) } in (e2) where { b = f a }
Does the Haskell specification indicate that the definition of 'a' is in-scope for the definition of 'b'?
Practical experience using HUGS suggests the answer is no, but my intuition is that the answer should be yes.
I was unable to find anything in either the report or the "gentle introduction" that made the correct answer clear to me (which is not to say it's not there, just that I didn't find it). I think the tutorial might benefit from a discussion of what is in-scope for where clauses.
<comment> FWIW, my intuition was that
e where defs
was a form of expression (like let ... in), in which some sub-expressions were factored out as subsidiary definitions; i.e. that I'd expect to be able to replace each occurrence of a name defined by 'where' with the body of the corresponding definition. Hence I'd expect the let definitions to be in-scope.
I now see that use of 'where' is restricted to specific contexts. I wonder if such restriction is needed? The differences between let and where in Haskell are something I find to be confusing.
</comment>
#g
------------------- Graham Klyne <[EMAIL PROTECTED]> PGP: 0FAA 69FF C083 000B A2E9 A131 01B9 1C7A DBCA CB5E
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell