[plt-scheme] Re: Typed Scheme

From: Matthew Swank (akopa.gmane.poster at gmail.com)
Date: Sun May 27 00:22:18 EDT 2007

On Sat, 26 May 2007 07:57:12 -0400, Sam TH wrote:

> On 5/25/07, Matthew Swank <akopa.gmane.poster at gmail.com> wrote:
>>
>> Could someone post an example using the (All (v ...) t) construct.
> 
> Here's a simple example:
> 
> (define: simple-map : (All (a) ((a -> a) (Listof a) -> (Listof a)))
>   (plambda: (a) ([f : (a -> a)] [l : (Listof a)])
>     (cond [(null? l) null]
>           [else (cons (f (car l))
>                       (map f (cdr l)))])))
> 
> (simple-map (lambda: ([x : Number]) (+ x 1)) '(1 2 3))
> 
> However, this can be more concisely written as follows:
> 
> (pdefine: (a) (simple-map [f : (a -> a)] [l : (Listof a)]) : (Listof a)
>   (cond [(null? l) null]
>         [else (cons (f (car l))
>                     (map f (cdr l)))]))
> 
> where pdefine: abbreviates all of the boilerplate, including the use
> of (All ...).
> 

This is a silly example:

(define: x-or-nil : (case-lambda (number -> number) 
                                 ((Listof number) -> (Listof number)))
    (case-lambda:
      (((x : number)) x)
      (((x : (Listof number))) ())))

but is there a more compact way to define case-lambdas?

Thanks again,

Matt
-- 
"You do not really understand something unless you
 can explain it to your grandmother." - Albert Einstein.




Posted on the users mailing list.