Thanks for the clear answer Carl - below are just some more thoughts... <br><br><div><span class="gmail_quote">On 6/11/07, <b class="gmail_sendername">Carl Eastlund</b> &lt;<a href="mailto:cce@ccs.neu.edu">cce@ccs.neu.edu</a>
&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>&gt; Not at all.&nbsp;&nbsp;The function (lambda (x) 3.7) qualifies as a number -&gt;
<br>&gt; number function, but it is not int -&gt; int.&nbsp;&nbsp;Calling add1 a number -&gt;<br>&gt; number function throws away valuable information about how it can be<br>&gt; used on integers, positive numbers, and so forth.</blockquote>
<div><br>Okay - I understand your point now - thanks for clarification. <br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; Raising an exception means control passes to the nearest dynamically
<br>&gt; installed exception handler, nothing more or less.&nbsp;&nbsp;Programs and<br>&gt; semantics don&#39;t make value judgments.&nbsp;&nbsp;Programs often raise exceptions<br>&gt; when nothing &quot;incorrect&quot; has happened.</blockquote>
<div><br>If you mean exceptions arising outside of programmer&#39;s control such as out of disk space, etc., I see those as defensive programming techniques, that from an end user&#39;s perspective, failure to handle the exceptions is incorrect semantic ;)&nbsp; 
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; As for the &quot;type semantics&quot; of raising an exception, as I said, many
<br>&gt; static type systems treat expressions known to raise exceptions as<br>&gt; having any type.&nbsp;&nbsp;Hence my statement that add1, which raises an<br>&gt; exception on large classes of inputs, has many different return types
<br>&gt; for those inputs.&nbsp;&nbsp;If you want to assign a different &quot;type semantics&quot;<br>&gt; to exceptions, you&#39;ll have to describe your type system in greater<br>&gt; detail.</blockquote><div><br>This is where I see a general exception or condition or continuation mechanism, while good as building blocks, loses the richer information that you are alluding with the add1 example (
i.e. using number -&gt; number loses the richer meaning of int -&gt; int) - but I am<br>digressing here... <br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
&gt; Do you mean conceptually, as in &quot;we can imagine the type int -&gt; int<br>&gt; for add1&quot;?&nbsp;&nbsp;Or do you mean actually, in that &quot;Scheme knows that add1<br>&gt; is a procedure&quot;?&nbsp;&nbsp;Of course in the former sense, we can apply most
<br>&gt; type systems to just about any language.&nbsp;&nbsp;In the latter, Scheme has a<br>&gt; type system, but not a very detailed one.</blockquote><div><br>I didn&#39;t know what type info is available internally in mzscheme, but assume at least the latter. I would assume the lack of a detailed type system is not an inadvertent admission in scheme specification - right? ;) And if the reason is to support research and experimentation, that&#39;s fine.&nbsp; If the reason is because one cannot describe all types that would terminate, that&#39;s fine too ;) 
<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt; Depends on what you mean.&nbsp;&nbsp;Of course, in Scheme you can assign a type<br>
&gt; to everything, but &quot;Scheme value&quot; is not a very useful type.&nbsp;&nbsp;On the<br>&gt; other hand, if your type system uses &quot;int -&gt; int&quot; to designate<br>&gt; &quot;functions which, when given an integer input, always terminate and
<br>&gt; yield an integer result&quot;, then yes you will run into problems trying<br>&gt; to typecheck some functions, partly because of that &quot;always terminate&quot;<br>&gt; clause.&nbsp;&nbsp;There are some things type systems can&#39;t do.
</blockquote><div><br>Wondering what people think of Qi (<a href="http://www.lambdassociates.org/">http://www.lambdassociates.org/</a>) that features a type system that doesn&#39;t guarantee to terminate... ;) <br>Thanks,
<br>yc<br><br></div></div>