#lang scribble/doc
@(require scribble/manual
scribble/eval
"../planet.ss"
"eval.ss")
@(require (for-label scheme (this-package-in scheme)))
@title[#:style 'quiet #:tag "contract"]{Contracts}
@defmodule/this-package[contract]
This module provides useful contracts and contract constructors.
@section{Flat Contracts}
@defthing[nat/c flat-contract?]{
This contract recognizes natural numbers that satisfy
@scheme[exact-nonnegative-integer?].
}
@defthing[pos/c flat-contract?]{
This contract recognizes positive integers that satisfy
@scheme[exact-positive-integer?].
}
@defthing[truth/c flat-contract?]{
This contract recognizes Scheme truth values, i.e., any value, but with a more
informative name and description. Use it in negative positions for arguments
that accept arbitrary truth values that may not be booleans.
}
@section{Higher-Order Contracts}
@deftogether[(
@defthing[thunk/c contract?]
@defthing[unary/c contract?]
@defthing[binary/c contract?]
)]{
These contracts recognize functions that accept 0, 1, or 2 arguments,
respectively, and produce a single result.
}
@deftogether[(
@defthing[predicate/c contract?]
@defthing[predicate-like/c contract?]
)]{
These contracts recognize predicates: functions of a single argument that
produce a boolean result.
The first constrains its output to satisfy @scheme[boolean?]. Use
@scheme[predicate/c] in positive position for predicates that guarantee a result
of @scheme[#t] or @scheme[#f].
The second constrains its output to satisfy @scheme[truth/c]. Use
@scheme[predicate-like/c] in negative position for predicates passed as
arguments that may return arbitrary values as truth values.
}
@deftogether[(
@defthing[comparison/c contract?]
@defthing[comparison-like/c contract?]
)]{
These contracts recognize comparisons: functions of two arguments that
produce a boolean result.
The first constrains its output to satisfy @scheme[boolean?]. Use
@scheme[comparison/c] in positive position for comparisons that guarantee a
result of @scheme[#t] or @scheme[#f].
The second constrains its output to satisfy @scheme[truth/c]. Use
@scheme[comparison-like/c] in negative position for comparisons passed as
arguments that may return arbitrary values as truth values.
}