On Nov 29, 2012, at 10:29 PM, Greg Hendershott wrote: > AFIK these subtleties of contracts and modules arise with > `provide/contract' -- by saying that the function should only use a > contract outside the module (or submodule). > > But I prefer to use `define/contract'. For one thing, I think it's > easier and more-maintainable to group the contract near/with its > function in the source. But I also prefer it on the starting > assumption that if a procedure is worth contracting at all, it's worth > contracting all the time -- inside the module as well as outside.
This is a complete misunderstanding. Contracts are specifications
that govern the flow of values across boundaries. We call this boundary
a 'module' but for several years now, module and #lang have been two
distinct terms. In this spirit,
-- #lang with provide contract-out is a module
-- define/contract is a module
-- internal modules are modules but watch out for module+
In contrast,
-- units and classes are values and we have contracts for them
but they do NOT establish contract boundaries, they are
NOT modules.
In your specific case, define/contract splits an existing 'module'
into two pieces.
;; ---
As I have said many times, your use of contract is likely to be
much better satisfied with the use of Typed Racket. I doubt that
many of your contracts are checking more than constructors, which
roughly corresponds to type checking. For the remaining ones, Sam
will provide
provide/typed with contract-out
require/typed with contract-in
ANY TIME SOON NOW.
;; ---
As for performance of contracts:
On Nov 29, 2012, at 11:47 PM, Harry Spier wrote:
> And then to enable/disable contracts you can use the method Mathias
> pointed out here.
> http://www.mail-archive.com/[email protected]/msg12281.html
Thanks for reminding the list of this post. I should write this
out as a blog post or an entry into our Contract Guide.
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users

