add contract for set-filterer-lens

This commit is contained in:
AlexKnauth 2015-08-20 20:30:36 -04:00
parent db0a7ba4c9
commit e95d387ebe
2 changed files with 10 additions and 3 deletions

View File

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

View File

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