 B
                           C)]
               ((z x) y)))))))
</code></pre>
<p>The type becomes:</p>
<pre><code class="language-clojure">(==&gt; A B
     (forall [C :type]
        (==&gt; (==&gt; A B
                  C)
             C)))
</code></pre>
<p>That’s a little bit more readable… but we will write this even more concisely by naming <code>(pair A B)</code> the <code>(forall [C :type] ... C)</code> subexpression. We get:</p>
<pre><code class="language-clojure">(==&gt; A B
     (pair A B))
</c