title: Why isn't promise a data type in Scheme?
body: <p>The object returned by <code>delay</code> in Scheme is "a promise", but promises are not considered to be a type (so there is no <code>promise?</code> procedure, and it's not listed as a type in R5RS or R6RS).</p>
  
  <p>Is there a strong reson why this is so? It would seem quite natural to me to do something like <code>(if (promise? x) (force x) x)</code>, for example. (And I see that some implementations will let me force non-promises, and others will not). Also, if I can store something in a variale and pass it around, I feel like it <em>should</em> have a type.</p>