Wow - some great responses on the thread - I have some more questions to chime in and hopefully it&#39;s not too late ;)&nbsp; <br><br><span class="gmail_quote">On 6/11/07, <b class="gmail_sendername">Chongkai Zhu</b> &lt;<a href="mailto:czhu@cs.utah.edu">
czhu@cs.utah.edu</a>&gt; wrote:</span><br>
&gt; Yes, at the C level, MzScheme knows the type tag. But, on the Scheme<br>
&gt; level, everything is suppose to be transparent.<br>
<br>If scheme&#39;s type is really supposed to be transparent, I would venture that it isn&#39;t - because if it is, then I shouldn&#39;t have to test for types to call the right procedures, or write separate procedures that essentially do the same thing for different types (
i.e. no built-in generic programming). <br><br><div><span class="gmail_quote">On 6/11/07, <b class="gmail_sendername">Shriram Krishnamurthi</b> &lt;<a href="mailto:sk@cs.brown.edu">sk@cs.brown.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;">
&gt; What is the type of ADD1?&nbsp;&nbsp;What is the type of CALL/CC?&nbsp;&nbsp;How<br>&gt; about of (lambda (x) x)?&nbsp;&nbsp;Or<br><br>&gt; &nbsp; (let ([x 3])<br>&gt;&nbsp; &nbsp;&nbsp; (lambda (y)<br>&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; (when (= (random 2) 0)<br>&gt;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set! x y))<br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x))<br><br>&gt; ?</blockquote><div><br>Shouldn&#39;t mzscheme know  the answer to these questions?&nbsp; It seems possible within Haskell or Ocaml to infer  the types - below is my attempt but I probably have the syntax wrong.
<br><br><div style="margin-left: 40px;">add1 is int -&gt; int<br>(lambda (x) x) is any -&gt; any <br>I don&#39;t understand enough about call/cc so I won&#39;t attempt ;) <br>(let ((x 3)) (lambda (y) (when (= (random 2) 0) (set! x y)) x)) can be void -&gt; (any -&gt; (union int any)) 
<br></div></div><br>And the contract system does allow such specifications manually - running (add1 &quot;a&quot;) returns a run-time type mismatch error. <br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
&gt; PS: In general, when asking questions about &quot;every object&quot; in<br>&gt;&nbsp; &nbsp;&nbsp; a language like Scheme, it&#39;s imperative to remember the<br>&gt;&nbsp;&nbsp;&nbsp; higher-order values also.</blockquote><div><br>Does this mean that Scheme doesn&#39;t know about the higher order value itself?&nbsp; This might be where my gap is - from my perspective as a user, I am used to having the language platform knows about the types of the values, and externally observing scheme&#39;s behavior - it does know. 
<br><span class="gmail_quote"><br></span><span class="gmail_quote">On 6/11/07, <b class="gmail_sendername">Jos Koot</b> &lt;<a href="mailto:jos.koot@telefonica.net">jos.koot@telefonica.net</a>&gt; wrote:<br></span>&gt; It appears to me that there is even no agreement about what the type of a type
<br>&gt; would have to be, let alone the question when two types are the same ;) Please<br>&gt; take notice that (as a fan of PLT) I am quite content with PLT&#39;s system of<br>&gt; predicates, those for structs and object-classes included.
<br><br>I am also a fan and my reason to ask these questions is to understand how scheme&#39;s way work better (or worse, but I hope it&#39;s the former :P) than say C# or Python&#39;s way.&nbsp; My current feeling is that Scheme&#39;s type system requires explicit handling where I am used to handling implicitly.&nbsp; Perhaps as shown in the thread 
<a href="http://www.cs.brown.edu/pipermail/plt-scheme/2007-May/018457.html">http://www.cs.brown.edu/pipermail/plt-scheme/2007-May/018457.html</a> this approach allows for type research and experimentations at the expense of normal programming - and if this is a conscious design decision, that&#39;s fine - I am just trying to understand ;)
<br><br>Cheers,<br>yc<br><br></div></div>