 bool -&gt; bool = &lt;fun&gt;
# (||);;
- : bool -&gt; bool -&gt; bool = &lt;fun&gt;</code></pre><p>No additional laws or conditions need to be satisfied. This is extremely useful when you want to be able to write abstractions that work for <i>any</i> binary operation that's closed:</p><pre><code class="ml"># module List_Apply (M: Interface.MAGMA) =
  struct let apply init list = ListLabels.fold_left ~f:M.append ~init list end;;
module List_Apply :
  functor (M : Bastet.Interface.MAGMA) -&gt;
    sig val ap