[plt-scheme] Type scheme annotations and macros

From: Robby Findler (robby at cs.uchicago.edu)
Date: Wed Oct 22 11:33:25 EDT 2008

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
>
>


Posted on the users mailing list.