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