<blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">... so I 
don&#39;t think it makes sense to consider (&gt;) a part of Bool&#39;s semantics, no?</blockquote><div><br>A denotational semantic definition for a type (more traditionally, a syntactic category) have two parts: a semantic domain and a collection of *compositional* definitions for the building blocks of that type.  (&quot;Compositional&quot; in that a construct is defined strictly in terms of the meanings of its components.)  I think you&#39;re talking about the latter, while my complexity claim is about the former: What semantic model can we have for Bool, i.e. what is [[Bool]]?  The model I&#39;d like in a lazy functional language is the domain containing exactly three elements: true, false, and bottom (with the usual information ordering).<br>
<br>Whatever the domain corresponding to Bool is, the denotation of every (well-formed) Bool expression is an element of that domain.<br><br>The question I&#39;m asking is this: Assuming compositional semantics, can [[Bool]] be this simple &amp; customary three-value domain in the presence of an implementation-dependent [[Int]] (given that Int expressions can play a non-trivial role in Bool expressions)?<br>
<br>(Now you might say that Bool is just a data type definition.  If so, then rephrase the question in terms of simple data type definitions.)<br><br>  - Conal<br></div><br><div class="gmail_quote">On Mon, Mar 23, 2009 at 7:54 AM, Jake McArthur <span dir="ltr">&lt;<a href="mailto:jake@pikewerks.com">jake@pikewerks.com</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;">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<div class="im"><br>
<br>
Conal Elliott wrote:<br>
| Consider<br>
|     big :: Int<br>
|     big = 2147483647<br>
|     dodgy :: Bool<br>
|     dodgy = big + 1 &gt; big<br>
|     oops :: ()<br>
|     oops =  if dodgy then () else undefined<br>
|<br>
| Assuming compositional semantics, the meaning of oops depends on the<br>
| meaning of dodgy, which depends on the meaning of big+1, which is<br>
| implementation-dependent.  So a semantic domain for Bool and even ()<br>
| would have to include the machine-dependence of Int, so that oops could<br>
| mean a function from MachineInfo that returns () sometimes and bottom<br>
| sometimes.  If the denotations (semantic domains) for Bool and () didn&#39;t<br>
| include this complexity, they wouldn&#39;t be rich enough to capture the<br>
| machine-dependence of dodgy and oops.<br>
<br></div>
Since Bool&#39;s constructors are exported, we can define (&gt;) anywhere, so I<br>
don&#39;t think it makes sense to consider (&gt;) a part of Bool&#39;s semantics, no?<br>
<br>
- - Jake McArthur<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.9 (GNU/Linux)<br>
Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org" target="_blank">http://enigmail.mozdev.org</a><br>
<br>
iEYEARECAAYFAknHoq4ACgkQye5hVyvIUKkRugCghgh6qNqmpWvD5SQYX/8PzUws<br>
0Y8AoM3qJS5RIzoEFbD2aN1rR6EdJWh9<br>
=ozCQ<br>
-----END PGP SIGNATURE-----<br>
</blockquote></div><br>