commit
4a05f25f06
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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))))
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")
|
||||||
|
|
10
lens/list-pair-contract.rkt
Normal file
10
lens/list-pair-contract.rkt
Normal 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)
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ...)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user