How is the following ML Curry expression evaluated
It seems that what you are confused about is the common practice of Curryfication: the function
$$ (\alpha\times \alpha\rightarrow \beta)\rightarrow \alpha\rightarrow \alpha\rightarrow \mathrm{bool} $$

Is parenthesized as:

$$ (\alpha\times \alpha\rightarrow \beta)\rightarrow (\alpha\rightarrow (\alpha\rightarrow \mathrm{bool})) $$

and is equivalent to a different function:
$$ (\alpha\times \alpha\rightarrow \beta)\times \alpha\times \alpha\rightarrow \mathrm{bool} $$

The reason for this is the following. Take a function:

$$f:A \rightarrow (B\rightarrow C)$$
This is a function that takes an element $a:A$ and returns a function
$$ f\ a: B\rightarrow C$$
Apply this to an element $b:B$ and you have
$$f\ a\ b:C$$

It is clear that this is equivalent to a function $f':A\times B\rightarrow C$ that takes a pair $(a,b):A\times B$ and returns an element of $C$. The equivalence can be explicitely written:

curry : ('a * 'b -&gt; 'c) -&gt; ('a -&gt; 'b -&gt; 'c)
curry f' = function x -&gt; function y -&gt; f' (x,y)


or more simply

curry f' x y = f' (x,y)


The other direction goes:

uncurry : ('a -&gt; 'b -&gt; 'c) -&gt; ('a * 'b -&gt; 'c)
uncurry f = function p -&gt; let (x,y) = p in f x y


or simply

uncurry f (x,y) = f x y