<blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">It&#39;s obvious because () is a defined value, while bottom is not - per definitionem.<br></blockquote>
<br>I wonder if this argument is circular.<br><br>I&#39;m not aware of &quot;defined&quot; and &quot;not defined&quot; as more than informal terms.<br><br>Which definition(s) are you referring to?<br><br>&nbsp; - Conal<br><br>
<div class="gmail_quote">On Sat, Jan 24, 2009 at 12:31 PM, Daniel Fischer <span dir="ltr">&lt;<a href="mailto:daniel.is.fischer@web.de">daniel.is.fischer@web.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Am Samstag, 24. Januar 2009 21:12 schrieb Thomas Davie:<br>
<div class="Ih2E3d">&gt; On 24 Jan 2009, at 20:28, Jake McArthur wrote:<br>
&gt; &gt; Thomas Davie wrote:<br>
&gt; &gt;&gt; But, as there is only one value in the Unit type, all values we<br>
&gt; &gt;&gt; have no information about must surely be that value<br>
&gt; &gt;<br>
&gt; &gt; The flaw in your logic is your assumption that the Unit type has<br>
&gt; &gt; only one value. Consider<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp;bottom :: ()<br>
&gt; &gt; &nbsp; &nbsp;bottom = undefined<br>
&gt; &gt;<br>
&gt; &gt; Oviously, bottom is not ()<br>
&gt;<br>
&gt; Why is this obvious  I would argue that it&#39;s &quot;obvious&quot; that bottom<br>
&gt; *is* ()  the data type definition says there&#39;s only one value in the<br>
&gt; type. &nbsp;Any value that I haven&#39;t defined yet must be in the set, and<br>
&gt; it&#39;s a single element set, so it *must* be ().<br>
<br>
</div>It&#39;s obvious because () is a defined value, while bottom is not - per<br>
definitionem.<br>
The matter is that besides the elements declared in the datatype definition,<br>
every Haskell type also contains bottom.<br>
<div class="Ih2E3d"><br>
&gt;<br>
&gt; &gt; , but its type, nonetheless, is Unit. Unit actually has both () and<br>
&gt; &gt; _|_. More generally, _|_ inhabits every Haskell type, even types<br>
&gt; &gt; with no constructors (which itself requires a GHC extension, of<br>
&gt; &gt; course):<br>
&gt;<br>
&gt; Does it? &nbsp;Do you have a document that defines Haskell types that way?<br>
<br>
</div>Section 4.2.1 of the report<br>
<a href="http://haskell.org/onlinereport/decls.html#sect4.2" target="_blank">http://haskell.org/onlinereport/decls.html#sect4.2</a><br>
<div><div></div><div class="Wj3C7c">&gt;<br>
&gt; &gt; &nbsp; &nbsp;data Empty<br>
&gt; &gt;<br>
&gt; &gt; &nbsp; &nbsp;bottom&#39; :: Empty<br>
&gt; &gt; &nbsp; &nbsp;bottom&#39; = undefined<br>
&gt; &gt;<br>
&gt; &gt; If you only ever use total functions then you can get away with not<br>
&gt; &gt; accounting for _|_. Perhaps ironically a function that doesn&#39;t<br>
&gt; &gt; account for _|_ may be viewed philosophically as a partial function<br>
&gt; &gt; since its contract doesn&#39;t accommodate all possible values.<br>
&gt;<br>
&gt; Now that one is interesting, I would argue that this is a potential<br>
&gt; flaw in the type extension  values in the set defined here do not<br>
&gt; exist, that&#39;s what the data definition says.<br>
&gt;<br>
&gt; Bob<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>