
27 May
2008
27 May
'08
4:07 p.m.
On Tue, May 27, 2008 at 3:40 PM, Kim-Ee Yeoh
Let's fill in the type variable: (x -> x) -> (Char, Bool) ==> forall x. (x -> x) -> (Char, Bool) ==> x_t -> (x -> x) -> (Char, Bool), where x_t is the hidden type-variable, not unlike the reader monad.
As you've pointed out, callER chooses x_t, say Int when passing in (+1) :: Int -> Int, which obviously would break \f -> (f 'J', f True).
What we want is the callEE to choose x_t since callEE needs to instantiate x_t to Char and Bool. What we want is (x_t -> x -> x) -> (Char, Bool). But that's just (forall x. x -> x) -> (Char, Bool).
Nice. That's the first time any of this really made sense to me. Is it possible to construct valid argument for that function? -- Darrin