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

Reply via email to