Refactoring
This commit is contained in:
parent
13764a070e
commit
f8d324863c
|
@ -1,6 +1,7 @@
|
|||
#lang racket
|
||||
|
||||
(require lens
|
||||
(require fancy-app
|
||||
lens
|
||||
unstable/sequence)
|
||||
|
||||
(module+ test
|
||||
|
@ -36,15 +37,25 @@
|
|||
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 grouped-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))
|
||||
(match-define (list keys lenses) (split-slice 2 keys/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)
|
||||
(value-list->hash keys (lens-view list-lens target)))
|
||||
(define (set target new-view-hash)
|
||||
|
|
Loading…
Reference in New Issue
Block a user