Merge pull request #163 from AlexKnauth/immutable-vector-map
fix vector-mapper-lens example
This commit is contained in:
commit
ea76ac4296
|
@ -3,6 +3,7 @@
|
||||||
(provide lens/c)
|
(provide lens/c)
|
||||||
|
|
||||||
(require racket/contract/base
|
(require racket/contract/base
|
||||||
|
unstable/contract
|
||||||
"gen-lens.rkt"
|
"gen-lens.rkt"
|
||||||
)
|
)
|
||||||
(module+ test
|
(module+ test
|
||||||
|
@ -13,10 +14,12 @@
|
||||||
))
|
))
|
||||||
|
|
||||||
(define (lens/c target/c view/c)
|
(define (lens/c target/c view/c)
|
||||||
|
(rename-contract
|
||||||
(gen-lens/c
|
(gen-lens/c
|
||||||
[lens-view (or/c #f [lens? target/c . -> . view/c])]
|
[lens-view (or/c #f [lens? target/c . -> . view/c])]
|
||||||
[lens-set (or/c #f [lens? target/c view/c . -> . target/c])]
|
[lens-set (or/c #f [lens? target/c view/c . -> . target/c])]
|
||||||
[focus-lens (or/c #f [lens? target/c . -> . (values view/c [view/c . -> . target/c])])]))
|
[focus-lens (or/c #f [lens? target/c . -> . (values view/c [view/c . -> . target/c])])])
|
||||||
|
`(lens/c ,(contract-name target/c) ,(contract-name view/c))))
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
(check-exn exn:fail:contract?
|
(check-exn exn:fail:contract?
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
(provide (all-defined-out))
|
(provide (all-defined-out))
|
||||||
|
|
||||||
|
(require racket/vector)
|
||||||
|
|
||||||
;; The immutable? predicate only works for strings, byte-strings, vectors, hash-tables, and boxes.
|
;; The immutable? predicate only works for strings, byte-strings, vectors, hash-tables, and boxes.
|
||||||
|
|
||||||
(define (immutable-string? v)
|
(define (immutable-string? v)
|
||||||
|
@ -31,3 +33,6 @@
|
||||||
(define (build-immutable-vector n f)
|
(define (build-immutable-vector n f)
|
||||||
(vector->immutable-vector (build-vector n f)))
|
(vector->immutable-vector (build-vector n f)))
|
||||||
|
|
||||||
|
(define (immutable-vector-map f v)
|
||||||
|
(vector->immutable-vector (vector-map f v)))
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
'#(a c e))
|
'#(a c e))
|
||||||
(check-equal? (lens-set (vector-mapper-lens first-lens) '#((a b) (c d) (e f)) '#(1 2 3))
|
(check-equal? (lens-set (vector-mapper-lens first-lens) '#((a b) (c d) (e f)) '#(1 2 3))
|
||||||
'#((1 b) (2 d) (3 f)))
|
'#((1 b) (2 d) (3 f)))
|
||||||
(check-equal? (lens-transform (vector-mapper-lens first-lens) '#((a b) (c d) (e f)) (vector-map symbol->string _))
|
(check-equal? (lens-transform (vector-mapper-lens first-lens) '#((a b) (c d) (e f))
|
||||||
|
(immutable-vector-map symbol->string _))
|
||||||
'#(("a" b) ("c" d) ("e" f)))
|
'#(("a" b) ("c" d) ("e" f)))
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,5 +19,6 @@ Creates a lens that maps @racket[lens] over a target vector with @racket[vector-
|
||||||
@lenses-unstable-examples[
|
@lenses-unstable-examples[
|
||||||
(lens-view (vector-mapper-lens first-lens) '#((a b) (c d) (e f)))
|
(lens-view (vector-mapper-lens first-lens) '#((a b) (c d) (e f)))
|
||||||
(lens-set (vector-mapper-lens first-lens) '#((a b) (c d) (e f)) '#(1 2 3))
|
(lens-set (vector-mapper-lens first-lens) '#((a b) (c d) (e f)) '#(1 2 3))
|
||||||
(lens-transform (vector-mapper-lens first-lens) '#((a b) (c d) (e f)) (λ (xs) (vector-map symbol->string xs)))
|
(lens-transform (vector-mapper-lens first-lens) '#((a b) (c d) (e f))
|
||||||
|
(λ (xs) (vector->immutable-vector (vector-map symbol->string xs))))
|
||||||
]}
|
]}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user