add dict-ref-lens
This commit is contained in:
parent
c345505da6
commit
f763204514
16
lens/dict.rkt
Normal file
16
lens/dict.rkt
Normal 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
22
lens/dict.scrbl
Normal 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)
|
||||||
|
]}
|
|
@ -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"]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user