Rename * forms and remove unnecessary checks

This commit is contained in:
Jack Firth 2015-07-08 13:13:18 -07:00
parent f26cd40a45
commit fce8a8e5c6
3 changed files with 15 additions and 27 deletions

View File

@ -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)
first-lens number->string
second-lens (* 10 _))
(check-equal? (lens-transform/list '(1 2 3)
first-lens number->string
second-lens (* 10 _))
'("1" 20 3)))

View File

@ -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)
first-lens 10
second-lens 20)
(check-equal? (lens-set/list '(1 2 3)
first-lens 10
second-lens 20)
'(10 20 3)))

View File

@ -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))))