add mapper-lens

This commit is contained in:
AlexKnauth 2015-08-16 17:11:03 -05:00
parent 156dd6239f
commit 19c6723e28

30
unstable/lens/mapper.rkt Normal file
View File

@ -0,0 +1,30 @@
#lang racket/base
(provide mapper-lens
)
(require lens/base/main
fancy-app
)
(module+ test
(require rackunit lens/list/main))
(define (mapper-lens lens)
(make-lens
(lens-view/map lens _)
(lens-set/map lens _ _)))
(define (lens-view/map lens tgts)
(map (lens-view lens _) tgts))
(define (lens-set/map lens tgts new-views)
(map (lens-set lens _ _) tgts new-views))
(module+ test
(check-equal? (lens-view (mapper-lens first-lens) '((a b) (c d) (e f)))
'(a c e))
(check-equal? (lens-set (mapper-lens first-lens) '((a b) (c d) (e f)) '(1 2 3))
'((1 b) (2 d) (3 f)))
(check-equal? (lens-transform (mapper-lens first-lens) '((a b) (c d) (e f)) (map symbol->string _))
'(("a" b) ("c" d) ("e" f)))
)