5.3 Serializable Closures
The defunctionalization process of the Web Language (see Stateless Servlets) requires an explicit representation of closures that is serializable.
| (serial-lambda formals body ...) | 
| (serial-case-lambda [formals body ...] ...) | 
| (define-closure tag formals (free-var ...) body) | 
Defines a closure, constructed with make-tag that accepts a closure that returns
freevar ..., that when invoked with formals
executes body.
Here is an example:
| #lang racket | 
| (require racket/serialize) | 
| (define-closure foo (a b) (x y) | 
| (+ (- a b) | 
| (* x y))) | 
| (define f12 (make-foo (lambda () (values 1 2)))) | 
| (serialize f12) | 
| '((1) 1 (('page . foo:deserialize-info)) 0 () () (0 1 2)) | 
| (f12 6 7) | 
| 1 | 
| (f12 9 1) | 
| 10 | 
| (define f45 (make-foo (lambda () (values 4 5)))) | 
| (serialize f45) | 
| '((1) 1 (('page . foo:deserialize-info)) 0 () () (0 4 5)) | 
| (f45 1 2) | 
| 19 | 
| (f45 8 8) | 
| 20 |