lookup :: Env -> Ear -> Value
lookup = ...
f :: Env -> Expr -> Expr
f env exp =
let lookup = lookup env
in ...
is a fairly common pattern in automatically curried languages, or languages with functional-style loops (see [0] for such a usage of shadowing). I don't think that your stance is wrong, but I think decrying other stances isn't particularly fair to the language design world, where there are many languages where such shadowing is neither rare nor often an error. Of course, there is some play here insofar as treating function declarations differently from other variables, which is not the case in many languages where this behavior is accepted.
> Are you on Facebook? Is this your profile?
> Yes, but I'm not gonna accept your friend request.
The reply was usually a bit snarky with a bit of a chuckle, and that did it for most college-aged people. The few times someone persisted, I explained that Facebook is an aspect of my social life, not my professional life, and I intended to keep it that way.