[plt-scheme] Re: Typed Scheme
Matthew-
Unfortunately not. If you have a suggestion for a more compact
syntax, I'd be happy to consider it.
Also, note that your function always calls the first case, because
that's how the underlying case-lambda form works. The fact that your
code typechecks is actually a bug in the typechecker - that function
has type (Number -> Number). The next release of the package will fix
this (among other) bug.
sam th
On 5/27/07, Matthew Swank <akopa.gmane.poster at gmail.com> wrote:
> 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.
>
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
--
sam th
samth at ccs.neu.edu