>> 
    >> f f = f
    >> 

    Hans>   Haskell translates  f f = f  into  f := f |-> f; on the right hand side
    Hans> "f" is a bound variable, on the left hand side "f" is a name. Suppose I
    Hans> inidicate variables with a slash, then the formula would read
    Hans>     f := \f |-> \f
    Hans> or f(\f) := \f.

I don't really understand your remark. f f = f  as a toplevel
definition is equivalent to (in this special case)

letrec ...
        f = \f -> f
       ...

    Hans>   So Haskell allows different logical entities have the same name dependent
    Hans> on the context, which causes the confusion.

It's not different logical entities, all occurrences of f are variables.
It's not Haskell that's causing the confusion if any, it's the lambda
calculus, more precisely: alpha-conversion. 

-Peter


Reply via email to