Refactoring

This commit is contained in:
Jack Firth 2015-07-10 14:40:05 -07:00
parent 13764a070e
commit f8d324863c

View File

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