[plt-scheme] Type scheme annotations and macros
What about
(bif e1 e2 e3) => (if (and e1 #t) e2 e3)
Robby
On Wed, Oct 22, 2008 at 9:34 AM, Sam TH <samth at ccs.neu.edu> wrote:
> On Wed, Oct 22, 2008 at 10:05 AM, David Van Horn <dvanhorn at ccs.neu.edu> wrote:
>> A couple quick questions on Typed Scheme:
>>
>> 1) Why does the first type-check while the latter does not?
>>
>> #lang typed-scheme
>> (if #f
>> (add1 "dog")
>> 'ok)
>>
>> #;
>> (if (ann #f #f)
>> (add1 "dog")
>> 'ok)
>
> That looks like a bug. Can you file it in the bug database?
>
>> 2) How can I write a `bif' macro that works like Typed Scheme's if (ie.
>> types its branches with occurrence typing), but forces the conditional value
>> to be a Boolean and nothing but a Boolean?
>>
>> (define-syntax bif
>> (syntax-rules ()
>> [(bif e0 e1 e2)
>> (if (ann e0 Boolean)
>> e1
>> e2)]))
>>
>> This enforces a Boolean type on e0, but seems to destroy the occurrence
>> typing of e1 and e2.
>
> This is tricky, because the type of `e0' is what contains the
> occurence typing information, so annotating it with `Boolean' loses
> that information. I'll have to think about this more.
>
> Thanks,
> --
> sam th
> samth at ccs.neu.edu
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>