add hash-ref-lens
This commit is contained in:
parent
78d7d77eda
commit
1af475b44f
32
lenses/hash.rkt
Normal file
32
lenses/hash.rkt
Normal file
|
@ -0,0 +1,32 @@
|
|||
#lang racket/base
|
||||
|
||||
(provide hash-ref-lens)
|
||||
|
||||
(require fancy-app
|
||||
"core.rkt"
|
||||
)
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define ((hash-ref-lens1 key) hash)
|
||||
(values (hash-ref hash key)
|
||||
(hash-set hash key _))) ; fancy-app
|
||||
|
||||
(define (hash-ref-lens . keys)
|
||||
(apply lens-thrush (map hash-ref-lens1 keys)))
|
||||
|
||||
(module+ test
|
||||
(define a (hash-ref-lens 'a))
|
||||
(define a-x (hash-ref-lens 'a 'x))
|
||||
(let-lens [val ctxt] (a (hash 'a 1 'b 2 'c 3))
|
||||
(check-equal? val 1)
|
||||
(check-equal? (ctxt 100) (hash 'a 100 'b 2 'c 3)))
|
||||
(check-equal? (lens-transform* (hash 'a 1 'b 2 'c 3) a (* 10 _))
|
||||
(hash 'a 10 'b 2 'c 3))
|
||||
(let-lens [val ctxt] (a-x (hash 'a (hash 'x 1 'y 2) 'b (hash 'z 3)))
|
||||
(check-equal? val 1)
|
||||
(check-equal? (ctxt 100) (hash 'a (hash 'x 100 'y 2) 'b (hash 'z 3))))
|
||||
(check-equal? (lens-transform* (hash 'a (hash 'x 1 'y 2) 'b (hash 'z 3)) a-x (* 10 _))
|
||||
(hash 'a (hash 'x 10 'y 2) 'b (hash 'z 3)))
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user