From b404c4e92b9bb7b5c59f3b1183c0fc314f484418 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Mon, 17 Aug 2015 10:46:38 -0400 Subject: [PATCH] add lens-if --- unstable/lens/if.rkt | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 unstable/lens/if.rkt diff --git a/unstable/lens/if.rkt b/unstable/lens/if.rkt new file mode 100644 index 0000000..c12173d --- /dev/null +++ b/unstable/lens/if.rkt @@ -0,0 +1,26 @@ +#lang racket/base + +(provide lens-if) + +(require lens/base/main) +(module+ test + (require rackunit lens/list/main lens/vector/main)) + +(define (lens-if pred lens1 lens2) + (make-lens + (λ (tgt) + (if (pred tgt) + (lens-view lens1 tgt) + (lens-view lens2 tgt))) + (λ (tgt nvw) + (if (pred tgt) + (lens-set lens1 tgt nvw) + (lens-set lens2 tgt nvw))))) + +(module+ test + (define if-lens (lens-if list? first-lens (vector-ref-lens 0))) + (check-equal? (lens-view if-lens '(1 2 3)) 1) + (check-equal? (lens-view if-lens '#(1 2 3)) 1) + (check-equal? (lens-set if-lens '(1 2 3) 'a) '(a 2 3)) + (check-equal? (lens-set if-lens '#(1 2 3) 'a) '#(a 2 3)) + )