[plt-scheme] Typed scheme and curry
On Dec 19, 2008, at 6:37 PM, Eli Barzilay wrote:
> On Dec 19, Carl Eastlund wrote:
>> The "curry" function in Typed Scheme isn't just about writing curried
>> functions, it's about converting uncurried functions to curried
>> functions. If you want to write a function in a curried style from
>> the get-go, you can do it like this: [...]
>
> [Note: this is a reply for Scott.]
>
> Note that the basic problem that (the untyped) `curry' solves is
> unrelated to the typed vs the untyped worlds -- it's the fact that
> Scheme has variable arity functions, and therefore `curry' is
> "guessing" how many levels of function calls are needed. (I'll
> describe what it's "type" would be below.) (BTW, there is a plan to
> change how `curry' works -- the result is still going to be
> problematic for typed-scheme.) In any case, when you say
Lest we miss an obvious corollary of this discussion: you *can* make a
plain-vanilla "curry3" function for a fixed number of arguments (in
this case, 3):
#lang typed-scheme
(: curry3 (All (a b c d)
((a b c -> d)
->
(a -> (b -> (c -> d))))))
(define (curry3 f)
(lambda (a)
(lambda (b)
(lambda (c)
(f a b c)))))
;; let's try it out:
(: fun-of-four (Number Number Number -> Number))
(define (fun-of-four x y z)
(* (+ x y) z))
((((curry3 fun-of-four) 3) 5) 6)
This isn't variable-arity, and it's not flexible the way that the
'curry' that Eli describes is.
John
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2484 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20081220/c60433a0/attachment.p7s>