Contracts #22
This commit is contained in:
Jack Firth 2015-07-08 10:30:49 -07:00
commit 4a05f25f06
12 changed files with 75 additions and 40 deletions

View File

@ -6,10 +6,13 @@
(require rackunit)) (require rackunit))
(provide let-lens (provide let-lens
make-lens (contract-out [make-lens (-> (-> any/c any/c)
focus-lens (-> any/c any/c any/c)
use-applicable-lenses! lens?)]
(rename-out [lens-struct? lens?])) [focus-lens (-> lens? any/c
(values any/c (-> any/c any/c)))]
[use-applicable-lenses! (-> void?)]
[lens? predicate/c]))
(define lenses-applicable? (make-parameter #f)) (define lenses-applicable? (make-parameter #f))
@ -28,6 +31,7 @@
(require rackunit) (require rackunit)
(check-exn exn:fail? (thunk (first-lens '(a b c))))) (check-exn exn:fail? (thunk (first-lens '(a b c)))))
(define lens? lens-struct?)
(define (make-lens getter setter) (define (make-lens getter setter)
(lens-struct getter setter)) (lens-struct getter setter))

View File

@ -8,8 +8,9 @@
(module+ test (module+ test
(require rackunit)) (require rackunit))
(provide lens-compose (provide
lens-thrush) (contract-out [lens-compose (->* () () #:rest (listof lens?) lens?)]
[lens-thrush (->* () () #:rest (listof lens?) lens?)]))
(define (lens-compose2 sub-lens super-lens) (define (lens-compose2 sub-lens super-lens)

View File

@ -6,7 +6,8 @@
(require rackunit (require rackunit
"view-set.rkt")) "view-set.rkt"))
(provide identity-lens) (provide
(contract-out [identity-lens lens?]))
(define (second-value _ v) v) (define (second-value _ v) v)

View File

@ -1,16 +1,23 @@
#lang racket #lang racket
(require unstable/sequence (require unstable/sequence
"base.rkt") "base.rkt"
"../list-pair-contract.rkt")
(module+ test (module+ test
(require rackunit (require rackunit
fancy-app)) fancy-app))
(provide lens-transform (provide
lens-transform*) (contract-out
[lens-transform (-> lens? any/c (-> any/c any/c) any/c)]
[lens-transform* (->* (any/c) #:rest (listof2 lens? (-> any/c any/c)) any/c)]))
(define (listof* . contracts)
(or/c '() (apply list/c (append contracts (list (apply listof* contracts))))))
(define (lens-transform lens v f) (define (lens-transform lens v f)
(let-lens (view setter) lens v (let-lens (view setter) lens v
(setter (f view)))) (setter (f view))))

View File

@ -2,14 +2,17 @@
(require unstable/sequence (require unstable/sequence
fancy-app fancy-app
"base.rkt") "base.rkt"
"../list-pair-contract.rkt")
(module+ test (module+ test
(require rackunit)) (require rackunit))
(provide lens-view (provide
lens-set (contract-out [lens-view (-> lens? any/c any/c)]
lens-view* [lens-view* (->* (any/c) #:rest (listof lens?) any/c)]
lens-set*) [lens-set (-> lens? any/c any/c any/c)]
[lens-set* (->* (any/c) #:rest (listof2 lens? any/c) any/c)]))
(define (lens-view lens v) (define (lens-view lens v)

View File

@ -1,6 +1,8 @@
#lang racket/base #lang racket
(provide hash-ref-lens) (provide
(contract-out
[hash-ref-lens (-> any/c lens?)]))
(require fancy-app (require fancy-app
"base/main.rkt") "base/main.rkt")

View File

@ -0,0 +1,10 @@
#lang racket
(provide
(contract-out [listof2 (-> contract? contract? contract?)]))
(define (listof2 first-val/c second-val/c)
(define c
(or/c empty? (cons/c first-val/c (cons/c second-val/c (recursive-contract c)))))
c)

View File

@ -1,8 +1,9 @@
#lang racket/base #lang racket
(provide assoc-lens (provide
assv-lens (contract-out [assoc-lens (->* (any/c) (#:is-equal? (-> any/c any/c boolean?)) lens?)]
assq-lens) [assv-lens (-> any/c lens?)]
[assq-lens (-> any/c lens?)]))
(require racket/list (require racket/list
fancy-app fancy-app

View File

@ -17,7 +17,7 @@
(define-simple-macro (provide-c_r-lens id:id) (define-simple-macro (provide-c_r-lens id:id)
#:with c_r-lens (c_r-lens-id #'id) #:with c_r-lens (c_r-lens-id #'id)
(provide c_r-lens)) (provide (contract-out [c_r-lens lens?])))
(provide-c_r-lenses (provide-c_r-lenses
aa ad da dd aa ad da dd

View File

@ -1,6 +1,8 @@
#lang racket/base #lang racket
(provide car-lens cdr-lens) (provide
(contract-out [car-lens lens?]
[cdr-lens lens?]))
(require "../base/main.rkt") (require "../base/main.rkt")

View File

@ -1,19 +1,21 @@
#lang racket/base #lang racket
(provide list-ref-lens (provide
list-ref-nested-lens (contract-out
take-lens [list-ref-lens (-> exact-nonnegative-integer? lens?)]
drop-lens [list-ref-nested-lens (->* () #:rest (listof exact-nonnegative-integer?) lens?)]
first-lens [take-lens (-> exact-nonnegative-integer? lens?)]
second-lens [drop-lens (-> exact-nonnegative-integer? lens?)]
third-lens [first-lens lens?]
fourth-lens [second-lens lens?]
fifth-lens [third-lens lens?]
sixth-lens [fourth-lens lens?]
seventh-lens [fifth-lens lens?]
eighth-lens [sixth-lens lens?]
ninth-lens [seventh-lens lens?]
tenth-lens) [eighth-lens lens?]
[ninth-lens lens?]
[tenth-lens lens?]))
(require racket/list (require racket/list
fancy-app fancy-app

View File

@ -7,7 +7,9 @@
(module+ test (module+ test
(require rackunit)) (require rackunit))
(provide syntax-keyword-seq-lens) (provide
(contract-out
[syntax-keyword-seq-lens (-> keyword? lens?)]))
(define-syntax-rule (syntax-parse/default-noop stx option-or-clause ...) (define-syntax-rule (syntax-parse/default-noop stx option-or-clause ...)