[racket-dev] contract-out
Very nice! Is it easy to make a provide form that conditionally provides with contracts, such as Sam's provide-cond-contract in typed-scheme/utils/utils.rkt?
-Ian
----- Original Message -----
From: Matthew Flatt <mflatt at cs.utah.edu>
To: dev at racket-lang.org
Sent: Sat, 24 Sep 2011 09:41:17 -0400 (EDT)
Subject: [racket-dev] contract-out
The `racket/contract' and `racket' modules now provide `contract-out',
which is a `provide' form for contracts. Use
(provide (contract-out ....))
instead of
(provide/contract ....)
There's one difference between `(provide (contract-out ....))' and
`(provide/contract ....)': contract expressions in contract-out' are
implicitly moved to the end of the module, which means that they can
refer to variables that are defined later. For example, the following
program works as you'd expect:
#lang racket
(provide (contract-out [mask-of (turtle? . -> . color?)])
turtle?
color?)
(define (turtle? v)
(memq v '(Leonardo Michelangelo Donatello Raphael)))
(define (color? v)
(memq v '(blue orange purple red)))
(define (mask-of t)
(match t
['Leonardo 'blue]
['Michelangelo 'orange]
['Donatello 'purple]
['Raphael 'red]))
The `contract-out' form is implemented as a provide pre-transformer,
which is a new kind of `provide' form that is now supported by
`racket/provide-transform'.
_________________________________________________
For list-related administrative tasks:
http://lists.racket-lang.org/listinfo/dev