I was about to refute your argument by proposing creating a union type. Here is a relevant reference: 
<a href="https:&#x2F;&#x2F;realworldocaml.org&#x2F;v1&#x2F;en&#x2F;html&#x2F;functors.html" rel="nofollow">https:&#x2F;&#x2F;realworldocaml.org&#x2F;v1&#x2F;en&#x2F;html&#x2F;functors.html</a><p>(This idiom is a bit of a historical error. It would be better if compare returned a variant with three cases for less than, greater than, and equal. But it&#x27;s a well-established idiom at this point, and unlikely to change.)<p>Eiffel is similar to ocaml : 
<a href="http:&#x2F;&#x2F;www.infor.uva.es&#x2F;~felix&#x2F;referencia_smart_eiffel&#x2F;libraries&#x2F;string.html" rel="nofollow">http:&#x2F;&#x2F;www.infor.uva.es&#x2F;~felix&#x2F;referencia_smart_eiffel&#x2F;libra...</a><p>Does anyone know the advantages of the above signature over the Haskell alternative? Because this seems to be more obvious and easier to read. So there are more than one language guilty of using a ternary operator for compare.<p>Haskell does define the appropriate constructors, rightly so: 
<a href="https:&#x2F;&#x2F;hackage.haskell.org&#x2F;package&#x2F;base-4.8.1.0&#x2F;docs&#x2F;Data-Ord.html#t:Ordering" rel="nofollow">https:&#x2F;&#x2F;hackage.haskell.org&#x2F;package&#x2F;base-4.8.1.0&#x2F;docs&#x2F;Data-O...</a><p>data Ordering :: *<p>Constructors
LT	 
EQ	 
GT