Think about the types in this computation deep, really deep
id id
From right to left, the first id
has type
a -> a
that means the second id
which takes the first as argument must have type
(a -> a) -> (a -> a)
The types don't match! OK by you could say the first id
actually had this later type, however this would make the second id
be of type
((a -> a) -> (a -> a)) -> ((a -> a) -> (a -> a))
I thought that inspite of the fact that functions could have generic or variable types, functions where bound to some upon a computation. As I see it, it seems that a new id
function is defined on every call.