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
(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
racket/contract/base
racket/list
racket/set
fancy-app
@ -27,6 +30,10 @@
(for/fold ([set set]) ([elem (in-set set)] #:when (pred elem))
(set-remove set elem)))
(define (functional-set? st)
(and (generic-set? st)
(set-implements? st 'set-add 'set-remove)))
(module+ test
(check-equal? (lens-view (set-filterer-lens number?) '(1 a 2 b c 3 d e))
'(1 2 3))

View File

@ -6,7 +6,7 @@
@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].
@lenses-unstable-examples[
(lens-view (set-filterer-lens number?) (set 1 'a 2 'b 'c 3 'd 'e))