Rename * forms and remove unnecessary checks
This commit is contained in:
parent
f26cd40a45
commit
fce8a8e5c6
|
@ -11,13 +11,10 @@
|
|||
(provide
|
||||
(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)]))
|
||||
[lens-transform/list (->* (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)
|
||||
(let-lens (view setter) lens v
|
||||
(setter (f view))))
|
||||
|
@ -30,11 +27,7 @@
|
|||
'("1" 2 3)))
|
||||
|
||||
|
||||
(define (lens-transform* v . lenses/fs)
|
||||
(unless (even? (length lenses/fs))
|
||||
(error 'lens-transform*
|
||||
"expected an even number of association elements\n association elements: ~v"
|
||||
lenses/fs))
|
||||
(define (lens-transform/list v . lenses/fs)
|
||||
(for/fold ([v v]) ([lens/f (in-slice 2 lenses/fs)])
|
||||
(match-define (list lens f) lens/f)
|
||||
(lens-transform lens v f)))
|
||||
|
@ -43,7 +36,7 @@
|
|||
(define (set-second l v)
|
||||
(list* (first l) v (rest (rest l))))
|
||||
(define second-lens (make-lens second set-second))
|
||||
(check-equal? (lens-transform* '(1 2 3)
|
||||
(check-equal? (lens-transform/list '(1 2 3)
|
||||
first-lens number->string
|
||||
second-lens (* 10 _))
|
||||
'("1" 20 3)))
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
|
||||
(provide
|
||||
(contract-out [lens-view (-> lens? any/c any/c)]
|
||||
[lens-view* (->* (any/c) #:rest (listof lens?) list?)]
|
||||
[lens-view/list (->* (any/c) #:rest (listof lens?) list?)]
|
||||
[lens-set (-> lens? any/c any/c any/c)]
|
||||
[lens-set* (->* (any/c) #:rest (listof2 lens? any/c) any/c)]))
|
||||
[lens-set/list (->* (any/c) #:rest (listof2 lens? any/c) any/c)]))
|
||||
|
||||
|
||||
(define (lens-view lens target)
|
||||
|
@ -23,14 +23,10 @@
|
|||
(let-lens (_ setter) lens target
|
||||
(setter x)))
|
||||
|
||||
(define (lens-view* target . lenses)
|
||||
(define (lens-view/list target . lenses)
|
||||
(map (lens-view _ target) lenses))
|
||||
|
||||
(define (lens-set* target . lenses/xs)
|
||||
(unless (even? (length lenses/xs))
|
||||
(error 'lens-set*
|
||||
"expected an even number of association elements\n association elements: ~v"
|
||||
lenses/xs))
|
||||
(define (lens-set/list target . lenses/xs)
|
||||
(for/fold ([target target]) ([lens/x (in-slice 2 lenses/xs)])
|
||||
(match-define (list lens x) lens/x)
|
||||
(lens-set lens target x)))
|
||||
|
@ -44,9 +40,9 @@
|
|||
(define second-lens (make-lens second set-second))
|
||||
(check-equal? (lens-view first-lens '(1 2 3)) 1)
|
||||
(check-equal? (lens-set first-lens '(1 2 3) 'a) '(a 2 3))
|
||||
(check-equal? (lens-view* '(1 2 3) first-lens second-lens)
|
||||
(check-equal? (lens-view/list '(1 2 3) first-lens second-lens)
|
||||
'(1 2))
|
||||
(check-equal? (lens-set* '(1 2 3)
|
||||
(check-equal? (lens-set/list '(1 2 3)
|
||||
first-lens 10
|
||||
second-lens 20)
|
||||
'(10 20 3)))
|
||||
|
|
|
@ -11,6 +11,5 @@
|
|||
(dict-set _ key _)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (lens-transform* '((a . 1) (b . 2) (c . 3)) (dict-ref-lens 'a) (* 100 _))
|
||||
'((a . 100) (b . 2) (c . 3)))
|
||||
)
|
||||
(check-equal? (lens-transform/list '((a . 1) (b . 2) (c . 3)) (dict-ref-lens 'a) (* 100 _))
|
||||
'((a . 100) (b . 2) (c . 3))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user