From c2c88410245f5173f6ad681e16d6d61f733e6f37 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Thu, 27 Aug 2015 21:20:31 -0400 Subject: [PATCH] add dict-ref-nested-lens --- unstable/lens/dict-nested.rkt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 unstable/lens/dict-nested.rkt diff --git a/unstable/lens/dict-nested.rkt b/unstable/lens/dict-nested.rkt new file mode 100644 index 0000000..c54b362 --- /dev/null +++ b/unstable/lens/dict-nested.rkt @@ -0,0 +1,24 @@ +#lang sweet-exp racket/base + +require racket/contract/base +provide + contract-out + dict-ref-nested-lens (->* [] #:rest (listof any/c) (lens/c functional-dict? any/c)) + +require lens/private/base/main + lens/private/compound/thrush + lens/private/dict + lens/private/util/functional-dict +module+ test + require rackunit fancy-app + +(define (dict-ref-nested-lens . ks) + (apply lens-thrush (map dict-ref-lens ks))) + +module+ test + (define a-x (dict-ref-nested-lens 'a 'x)) + (let-lens [val ctxt] a-x '([a . ([x . 1] [y . 2])] '[b . ([z . 3])]) + (check-equal? val 1) + (check-equal? (ctxt 100) '([a . ([x . 100] [y . 2])] '[b . ([z . 3])]))) + (check-equal? (lens-transform/list '([a . ([x . 1] [y . 2])] '[b . ([z . 3])]) a-x (* 10 _)) + '([a . ([x . 10] [y . 2])] '[b . ([z . 3])]))