Desugaring of an equivalent source file shows that id is applied to the anonymous function, which is then applied to 1.
The following example of a function that is not polymorphic in its return type behaves closer to what I would have expected: It does not work.
Prelude> let z = (\y -> True) :: a -> Bool
Prelude> :t (`z` True)
<interactive>:1:2:
The operator `z' takes two arguments,
but its type `a0 -> Bool' has only one
In the expression: (`z` True)
What is the purpose/reason for this behaviour?