In article <[EMAIL PROTECTED]>, Ben Rudiak-Gould <[EMAIL PROTECTED]> wrote:
> Now we have something almost the same as the current implicit-parameter > system, except that it behaves in a much safer and saner way. Hmm... you have this: [?x,?x] [EMAIL PROTECTED] -- OK [?x] [EMAIL PROTECTED] -- OK [] [EMAIL PROTECTED] -- not OK You've disallowed the last one in an attempt to prevent ambiguity. However, not only is this ugly, it isn't sufficient. Consider this: let ?x = 1 in ((let g = \_ _ -> ?x in let ?x = 2 in g ?x) ?x) converts to: ((let g = \_ _ -> [EMAIL PROTECTED] -> @x in ((g ([EMAIL PROTECTED] -> @x)) [EMAIL PROTECTED] = 2})) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} 1. do @-application first ((let g = \_ _ -> [EMAIL PROTECTED] -> @x in (g 2)) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} (((\_ _ -> [EMAIL PROTECTED] -> @x) 2) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} ((\_ -> [EMAIL PROTECTED] -> @x) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} ([EMAIL PROTECTED] -> @x)[EMAIL PROTECTED] = 1} 1 2. do let-substitution first ((((\_ _ -> [EMAIL PROTECTED] -> @x) ([EMAIL PROTECTED] -> @x)) [EMAIL PROTECTED] = 2}) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} (((\_ -> [EMAIL PROTECTED] -> @x) [EMAIL PROTECTED] = 2}) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} ((\_ -> 2) ([EMAIL PROTECTED] -> @x))[EMAIL PROTECTED] = 1} (\_ -> 2) 1 2 Again, it all depends on the type of 'g'. -- Ashley Yakeley, Seattle WA _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell