add contract for set-filterer-lens
This commit is contained in:
parent
db0a7ba4c9
commit
e95d387ebe
|
@ -1,9 +1,12 @@
|
||||||
#lang racket/base
|
#lang racket/base
|
||||||
|
|
||||||
(provide set-filterer-lens)
|
(require racket/contract/base)
|
||||||
|
(provide (contract-out
|
||||||
|
[set-filterer-lens
|
||||||
|
(-> predicate/c (lens/c functional-set? functional-set?))]
|
||||||
|
))
|
||||||
|
|
||||||
(require lens/base/main
|
(require lens/base/main
|
||||||
racket/contract/base
|
|
||||||
racket/list
|
racket/list
|
||||||
racket/set
|
racket/set
|
||||||
fancy-app
|
fancy-app
|
||||||
|
@ -27,6 +30,10 @@
|
||||||
(for/fold ([set set]) ([elem (in-set set)] #:when (pred elem))
|
(for/fold ([set set]) ([elem (in-set set)] #:when (pred elem))
|
||||||
(set-remove set elem)))
|
(set-remove set elem)))
|
||||||
|
|
||||||
|
(define (functional-set? st)
|
||||||
|
(and (generic-set? st)
|
||||||
|
(set-implements? st 'set-add 'set-remove)))
|
||||||
|
|
||||||
(module+ test
|
(module+ test
|
||||||
(check-equal? (lens-view (set-filterer-lens number?) '(1 a 2 b c 3 d e))
|
(check-equal? (lens-view (set-filterer-lens number?) '(1 a 2 b c 3 d e))
|
||||||
'(1 2 3))
|
'(1 2 3))
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
@defmodule[unstable/lens/set-filterer]
|
@defmodule[unstable/lens/set-filterer]
|
||||||
|
|
||||||
@defproc[(set-filterer-lens [pred (-> any/c any/c)]) lens?]{
|
@defproc[(set-filterer-lens [pred (-> any/c any/c)]) (lens/c functional-set? functional-set?)]{
|
||||||
Creates a lens that filters a set by the predicate @racket[pred].
|
Creates a lens that filters a set by the predicate @racket[pred].
|
||||||
@lenses-unstable-examples[
|
@lenses-unstable-examples[
|
||||||
(lens-view (set-filterer-lens number?) (set 1 'a 2 'b 'c 3 'd 'e))
|
(lens-view (set-filterer-lens number?) (set 1 'a 2 'b 'c 3 'd 'e))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user