From e95d387ebec8b0349a9f8b13ab8904c65fb9c797 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Thu, 20 Aug 2015 20:30:36 -0400 Subject: [PATCH] add contract for set-filterer-lens --- unstable/lens/set-filterer.rkt | 11 +++++++++-- unstable/lens/set-filterer.scrbl | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/unstable/lens/set-filterer.rkt b/unstable/lens/set-filterer.rkt index e7123f8..9000163 100644 --- a/unstable/lens/set-filterer.rkt +++ b/unstable/lens/set-filterer.rkt @@ -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)) diff --git a/unstable/lens/set-filterer.scrbl b/unstable/lens/set-filterer.scrbl index 936c713..196be29 100644 --- a/unstable/lens/set-filterer.scrbl +++ b/unstable/lens/set-filterer.scrbl @@ -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))