Version 1.3
Richard Cobbe
<cobbe at ccs dot neu dot edu>

This collection provides one file, _contract-utils.ss_, which implements
several general-purpose contracts and contract utilities.


> (nelistof/c flat-contract) 

This function accepts a flat contract (or a predicate, which is converted
to a flat contract) and produces a contract that recognizes non-empty lists
whose elements match the given contract.

> sexp/c

This flat contract recognizes arbitrary S-expressions.  Here, an
S-expression is either the empty list, a number, a symbol, a string, a
Boolean, a character, or a cons cell containing two S-expressions.

> predicate/c

This flat contract recognizes (unary) predicate functions.  A predicate
function is a function which can consume any single value and always
produces a Boolean result.

> (optional/c flat-contract)

This function accepts a flat contract (or a predicate) and produces a
contract that recognizes an optional value---that is, either a value that
satisfies the given contract, or #f.

> positive-int/c

This flat contract recognizes strictly positive integers.

> (eta function)

This macro simply eta-expands function; that is, it expands to 
    (lambda args (apply f args)) .
This is useful primarily to allow contract definitions to appear before
their predicate definitions, for legibility reasons.


Contract-Utils: general-purpose PLT contract utilities.
Copyright (C) 2005  Richard Cobbe

This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or (at
your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
License for more details.

You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Clarification: I consider that simply using this library as a client, by
specifying its PLaneT module path in a require clause, is "mere
aggregation" according to the terms of the GNU LGPL, and therefore this
usage does not constrain the terms of the license under which you release
your client program.