That&#x27;s interesting, thanks!  It seems this one discriminates the different possibilities by type, and not by some extra tag (like the constructor in Haskell&#x27;s ADTs).  I wonder how that works, if you want to write something like the `either&#x27; function (or even just write down its type in C++):<p><pre><code>    either :: (a -&gt; c) -&gt; (b -&gt; c) -&gt; Either a b -&gt; c</code></pre>