function needs to be
    manifested in the signature, otherwise, if the user create another
    customized <i>compare</i> function, and the two collection would mix which
    would result in runtime error.
<p>

    The original OCaml stdlib solved the problem using <i>functor</i> which is a big
    closure in runtime; it makes dead code elimination much harder.
    We introduced a phantom type to solve the problem
<p>

    <pre class="codepre"><code class="code">      module Comparable1 = Belt.Id.MakeCompar