[plt-scheme] check-expect and Typed Scheme
Sam TH wrote:
> So I think the answer is that you're expecting more from Opaque types
> than they provide. All they give you is a type that you can check
> for. In particular, if you haven't checked for it, it won't ever be a
> KeyEvent. The only ways to construct a KeyEvent are to `require' one,
> or test for one with `key-event?'. So even though (key-event? 'left)
> is #t, the typechecker doesn't know that.
>
> Does that explain what's going on here?
Yes, thanks for the explanation Sam. But can you see where I'm coming
from based on the current documentation?
The type is defined as precisely those
values to which pred produces #t.
Since (key-event? 'left) is true, 'left has type KeyEvent. Or so I
thought. Maybe you could update the docs to include some of the
explanation you gave me?
Also, Richard captured much of what I was going to ask about, so I'm
interested in hearing the response.
In this particular case, I could've also just defined a type alias
KeyEvent for (U Symbol Char), without need for inj/proj functions. Is
there a benefit to one over the other?
David