From 19c6723e2832ff571b0a3af2c6dfa817d2322790 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Sun, 16 Aug 2015 17:11:03 -0500 Subject: [PATCH] add mapper-lens --- unstable/lens/mapper.rkt | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 unstable/lens/mapper.rkt diff --git a/unstable/lens/mapper.rkt b/unstable/lens/mapper.rkt new file mode 100644 index 0000000..6463753 --- /dev/null +++ b/unstable/lens/mapper.rkt @@ -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))) + )