add dict-ref-lens

This commit is contained in:
AlexKnauth 2015-07-07 22:54:41 -04:00
parent c345505da6
commit f763204514
3 changed files with 39 additions and 0 deletions

16
lens/dict.rkt Normal file
View File

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

22
lens/dict.scrbl Normal file
View File

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

View File

@ -16,4 +16,5 @@ source code: @url["https://github.com/jackfirth/lens"]
@include-section["base/main.scrbl"] @include-section["base/main.scrbl"]
@include-section["list/main.scrbl"] @include-section["list/main.scrbl"]
@include-section["struct.scrbl"] @include-section["struct.scrbl"]
@include-section["dict.scrbl"]
@include-section["applicable.scrbl"] @include-section["applicable.scrbl"]