#lang scheme
(require (only-in srfi/26 cut)
(only-in srfi/60 bit-field))
(define (list-refs clist . is)
(map (cut list-ref clist <>) is))
(define (make-bit-stream number)
(let ((position 0))
(lambda (count)
(let ((old-position position))
(set! position (+ count position))
(bit-field number old-position position)))))
(define (degrees->radians degrees)
(* pi (/ (remainder degrees 360) 180)))
(define (file-extension->kind extension (default 'png))
(case extension
[("png") 'png]
[("jpg" "jpeg") 'jpg]
[("xbm") 'xbm]
[("xpm") 'xpm]
[("bmp") 'bmp]
[else default]))
(define arity-one-procedure?
(flat-contract (cut procedure-arity-includes? <> 1)))
(provide/contract
[list-refs ((list?) () #:rest (listof integer?) . ->* . list?)]
[make-bit-stream (integer? . -> . (and/c procedure? arity-one-procedure?))]
[degrees->radians (number? . -> . number?)]
[file-extension->kind (string? . -> . symbol?)]
[arity-one-procedure? contract?])