contract.ss
#lang scheme
(require (planet cce/scheme:4:1/planet)
         (this-package-in main))

(provide in-list)

;; The range of all function contracts is `any' to avoid overhead.
(provide/contract 
 [cons      (-> any/c list? any)]
 [empty     empty?]
 [first     (-> cons? any)]
 [rest      (-> cons? list?)]
 [list-ref  (-> cons? natural-number/c any)]
 [list-set  (-> cons? natural-number/c any/c any)]
 [cons?     (-> any/c any)]
 [empty?    (-> any/c any)]
 [list?     (-> any/c any)]
 [list      (->* () () #:rest (listof any/c) any)]
 [list*     (->* (any/c) () #:rest (listof any/c) any)]
 [length    (-> list? any)]
 [append    (->* () () #:rest (listof list?) any)]
 [reverse   (-> list? any)]
 [second    (-> cons? any)]
 [third     (-> cons? any)]
 [fourth    (-> cons? any)]
 [fifth     (-> cons? any)]
 [sixth     (-> cons? any)]
 [seventh   (-> cons? any)]
 [eighth    (-> cons? any)]
 [ninth     (-> cons? any)]
 [tenth     (-> cons? any)]
 [last      (-> cons? any)]
 [list-tail (-> list? natural-number/c any)]
 [build-list (-> natural-number/c (-> natural-number/c any) any)]
 [make-list  (-> natural-number/c any/c any)]
 [list-update     (-> cons? natural-number/c (-> any/c any) any)]
 [list-ref/update (-> cons? natural-number/c (-> any/c any) any)]
 [list-ref/set    (-> cons? natural-number/c any/c any)]
 [map 
  (case-> (-> (-> any/c any) list? any)
          (-> procedure? list? list?
              #:rest (listof list?)
              any))]
 [andmap
  (case-> (-> (-> any/c any) list? any)
          (-> procedure? list? list?
              #:rest (listof list?)
              any))]
 [ormap
  (case-> (-> (-> any/c any) list? any)
          (-> procedure? list? list?
              #:rest (listof list?)
              any))]
 
  [foldr     
   (case-> (-> (-> any/c any/c any) any/c list? any)
           (-> procedure? any/c list? list?
               #:rest (listof list?)
               any))]

  [foldl 
   (case-> (-> (-> any/c any/c any) any/c list? any)
           (-> procedure? any/c list? list?
               #:rest (listof list?)
               any))])