al, uncurried version will be faster, but it may be less familiar to
    people who have a background in functional programming.
<p>

   <b>A special encoding for collection safety</b>
<p>

   When we create a collection library for a custom data type, take <i>Set</i> for
   example, suppose its element type is a pair of ints,
    it needs a custom <i>compare</i> function. However, the <i>Set</i> could not
    just be typed as <code class="code"> Set.t (int * int) </code>,
    its customized <i>compare</i> 