[plt-scheme] contract questions--convention for "any" conflict and inline documentation

From: Noel Welsh (noelwelsh at gmail.com)
Date: Fri Nov 21 17:51:07 EST 2008

On Fri, Nov 21, 2008 at 10:39 PM, Rob Hunter <rob.hunter at gmail.com> wrote:
> I'm new to contracts, and had a couple of questions for the community:
>
> (1) If I try to do a simple (require scheme/contracts), I run up
> against a conflict with SRFI-1 "any" and the contract "any".  I'm
> doing this right now, but was wondering if this was a common enough
> issue that a convention has been established:
>
> (rename-in scheme/contract
>                  (any c:any))

Yeah, this is a pain.  By and large I've shifted to comprehensions and
the PLT list library, so I don't run into it so often.  When I do use
SRFI 1 I typically require it using except-in any.

> (2) I like the idea of using contracts as a way of augmenting the
> documentation of a function.  My vision is to do use a convention like
> this for certain functions:
...
>
> This is all well and good, except that I can no longer have
> my-great-fn in the (provide ...) form at the top of my module.  I
> really like provide as an "always there" source of documenting what
> this module provides.  So, I'm considering using the following
> "comment convention", but does anyone have a better idea?

I now put my provide forms at the bottom of modules, so they work
consistently with contracts.  You can bind a name to a contract, as a
contract is just a value:

(define my-fn-contract (-> number? number?))
(define (my-fn n)
  (* n n))

and at the bottom of the file:

(provide/contract
  [my-fn my-fn-contract])

That's often too much work for me.

N.


Posted on the users mailing list.