Refactoring
This commit is contained in:
parent
13764a070e
commit
f8d324863c
|
@ -1,6 +1,7 @@
|
||||||
#lang racket
|
#lang racket
|
||||||
|
|
||||||
(require lens
|
(require fancy-app
|
||||||
|
lens
|
||||||
unstable/sequence)
|
unstable/sequence)
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
|
@ -36,15 +37,25 @@
|
||||||
first-lens))
|
first-lens))
|
||||||
|
|
||||||
|
|
||||||
|
(define (value-list->hash keys vs)
|
||||||
|
(make-immutable-hash (map cons keys vs)))
|
||||||
|
|
||||||
|
(define (split-slice n vs)
|
||||||
|
(define grouped
|
||||||
|
(for/list ([group (in-slice n vs)])
|
||||||
|
group))
|
||||||
|
(define (get-ith i)
|
||||||
|
(map (list-ref _ i) grouped))
|
||||||
|
(build-list n get-ith))
|
||||||
|
|
||||||
|
(module+ test
|
||||||
|
(check-equal? (split-slice 3 '(a 1 FOO b 2 BAR c 3 BAZ))
|
||||||
|
'((a b c) (1 2 3) (FOO BAR BAZ))))
|
||||||
|
|
||||||
|
|
||||||
(define (compound-hash-lens . keys/lenses)
|
(define (compound-hash-lens . keys/lenses)
|
||||||
(define grouped-keys/lenses
|
(match-define (list keys lenses) (split-slice 2 keys/lenses))
|
||||||
(for/list ([key/lens (in-slice 2 keys/lenses)])
|
|
||||||
key/lens))
|
|
||||||
(define keys (map first grouped-keys/lenses))
|
|
||||||
(define lenses (map second grouped-keys/lenses))
|
|
||||||
(define list-lens (apply compound-list-lens lenses))
|
(define list-lens (apply compound-list-lens lenses))
|
||||||
(define (value-list->hash keys xs)
|
|
||||||
(make-immutable-hash (map cons keys xs)))
|
|
||||||
(define (get target)
|
(define (get target)
|
||||||
(value-list->hash keys (lens-view list-lens target)))
|
(value-list->hash keys (lens-view list-lens target)))
|
||||||
(define (set target new-view-hash)
|
(define (set target new-view-hash)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user