<html><body bgcolor="#FFFFFF"><div>Getting back to the question, whatever happened to empty case expressions? We should not need bottom to write total functions from empty types.</div><div><br></div><div>Correspondingly, we should have that the map from an empty type to another given type is unique extensionally, although it may have many implementations. Wouldn't that make any empty type initial? Of course, one does need one's isogoggles on to see the uniqueness of the initial object.<br><br>An empty type is remarkably useful, e.g. as the type of free variables in closed terms, or as the value component of the monadic type of a server process.&nbsp;<span class="Apple-style-span" style="-webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); ">If we need bottom to achieve vacuous satisfaction, something is a touch amiss.</span></div><div><br></div><div>Cheers</div><div><br></div><div>Conor</div><div><br>On 30 Mar 2010, at 22:02, Edward Kmett &lt;<a href="mailto:ekmett@gmail.com">ekmett@gmail.com</a>&gt; wrote:<br><br></div><div></div><blockquote type="cite"><div>The uniqueness of the definition of Nothing only holds up to isomorphism.<br><br>This holds for many unique types, products, sums, etc. are all subject to this multiplicity of definition when looked at through the concrete-minded eye of the computer scientist. <br>
<br>The mathematician on the other hand can put on his fuzzy goggles and just say that they are all the same up to isomorphism. =)<br><br>-Edward Kmett<br><br><div class="gmail_quote">On Tue, Mar 30, 2010 at 3:45 PM,  <span dir="ltr">&lt;<a href="mailto:wagnerdm@seas.upenn.edu"><a href="mailto:wagnerdm@seas.upenn.edu">wagnerdm@seas.upenn.edu</a></a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Quoting Ashley Yakeley &lt;<a href="mailto:ashley@semantic.org" target="_blank"><a href="mailto:ashley@semantic.org">ashley@semantic.org</a></a>&gt;:<br>

<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
 &nbsp;data Nothing<div class="im"><br>
<br>
I avoid explicit "undefined" in my programs, and also hopefully non-termination. Then the bottomless interpretation becomes useful, for instance, to consider Nothing as an initial object of Hask particularly when using GADTs.<br>

</div></blockquote>
<br>
Forgive me if this is stupid--I'm something of a category theory newbie--but I don't see that Hask necessarily has an initial object in the bottomless interpretation. Suppose I write<br>
<br>
data Nothing2<br>
<br>
Then if I understand this correctly, for Nothing to be an initial object, there would have to be a function f :: Nothing -&gt; Nothing2, which seems hard without bottom. This is a difference between Hask and Set, I guess: we can't write down the "empty function". (I suppose unsafeCoerce might have that type, but surely if you're throwing out undefined you're throwing out the more frightening things, too...)<br>

<br>
~d<div><div></div><div class="h5"><br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank"><a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a></a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank"><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a></a><br>
</div></div></blockquote></div><br>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>Haskell-Cafe mailing list</span><br><span><a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a></span><br><span><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a></span><br></div></blockquote></body></html>