From f763204514af7fdeefbe48bd34b39ed361a27bd7 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Tue, 7 Jul 2015 22:54:41 -0400 Subject: [PATCH] add dict-ref-lens --- lens/dict.rkt | 16 ++++++++++++++++ lens/dict.scrbl | 22 ++++++++++++++++++++++ lens/main.scrbl | 1 + 3 files changed, 39 insertions(+) create mode 100644 lens/dict.rkt create mode 100644 lens/dict.scrbl diff --git a/lens/dict.rkt b/lens/dict.rkt new file mode 100644 index 0000000..6d4e04c --- /dev/null +++ b/lens/dict.rkt @@ -0,0 +1,16 @@ +#lang racket/base + +(provide dict-ref-lens) + +(require racket/dict fancy-app "base/main.rkt") +(module+ test + (require rackunit)) + +(define (dict-ref-lens key) + (make-lens (dict-ref _ key) + (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))) + ) diff --git a/lens/dict.scrbl b/lens/dict.scrbl new file mode 100644 index 0000000..b39a28c --- /dev/null +++ b/lens/dict.scrbl @@ -0,0 +1,22 @@ +#lang scribble/manual + +@(require scribble/eval + "lenses-examples.rkt" + (for-label lens + lens/dict + racket/base + racket/contract)) + + +@title{Dict lenses} + +@defmodule[lens/dict] + +@defproc[(dict-ref-lens [key any/c]) lens?]{ + Returns a lens for viewing the value mapped to @racket[key] in a dict. + @lenses-examples[ + (require lens/dict) + (define dict '((a . 1) (b . 2) (c . 3))) + (lens-view (dict-ref-lens 'a) dict) + (lens-set (dict-ref-lens 'a) dict 100) +]} diff --git a/lens/main.scrbl b/lens/main.scrbl index c3662a1..d417977 100644 --- a/lens/main.scrbl +++ b/lens/main.scrbl @@ -16,4 +16,5 @@ source code: @url["https://github.com/jackfirth/lens"] @include-section["base/main.scrbl"] @include-section["list/main.scrbl"] @include-section["struct.scrbl"] +@include-section["dict.scrbl"] @include-section["applicable.scrbl"]