From 96124baec0786a2b02543a4a8b36fbe60201dbd0 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Fri, 10 Jul 2015 18:55:00 -0700 Subject: [PATCH] Add lens-set-all and docs --- unstable/lens/main.rkt | 6 ++++-- unstable/lens/main.scrbl | 1 + unstable/lens/view-set.rkt | 19 +++++++++++++++++++ unstable/lens/view-set.scrbl | 15 +++++++++++++++ 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 unstable/lens/view-set.rkt create mode 100644 unstable/lens/view-set.scrbl diff --git a/unstable/lens/main.rkt b/unstable/lens/main.rkt index 70d8cf1..b657015 100644 --- a/unstable/lens/main.rkt +++ b/unstable/lens/main.rkt @@ -3,9 +3,11 @@ (require "syntax.rkt" "compound.rkt" "list.rkt" - "hash.rkt") + "hash.rkt" + "view-set.rkt") (provide (all-from-out "syntax.rkt" "compound.rkt" "list.rkt" - "hash.rkt")) + "hash.rkt" + "view-set.rkt")) diff --git a/unstable/lens/main.scrbl b/unstable/lens/main.scrbl index 665bb09..90299a2 100644 --- a/unstable/lens/main.scrbl +++ b/unstable/lens/main.scrbl @@ -9,6 +9,7 @@ This library provides additional features for the may change in future releases. Do not depend on this library being backwards-compatible. +@include-section["view-set.scrbl"] @include-section["compound.scrbl"] @include-section["list.scrbl"] @include-section["hash.scrbl"] diff --git a/unstable/lens/view-set.rkt b/unstable/lens/view-set.rkt new file mode 100644 index 0000000..e0c1519 --- /dev/null +++ b/unstable/lens/view-set.rkt @@ -0,0 +1,19 @@ +#lang racket + +(require lens + fancy-app) + +(module+ test + (require rackunit)) + +(provide + (contract-out + [lens-set-all (->* (any/c any/c) #:rest (listof lens?) any/c)])) + + +(define (lens-set-all target new-view . lenses) + (foldl (lens-set _ _ new-view) target lenses)) + +(module+ test + (check-equal? (lens-set-all '(1 2 3 4 5) 'a first-lens third-lens fourth-lens) + '(a 2 a a 5))) diff --git a/unstable/lens/view-set.scrbl b/unstable/lens/view-set.scrbl new file mode 100644 index 0000000..7164099 --- /dev/null +++ b/unstable/lens/view-set.scrbl @@ -0,0 +1,15 @@ +#lang scribble/manual + +@(require lens/doc-util/main) + + +@title{More Viewing and Setting} + +@defproc[(lens-set-all [target any/c] [new-view any/c] [lens lens?] ...) any/c]{ + Sets the view of @racket[target] through each @racket[lens] to @racket[new--view] + @lenses-unstable-examples[ + (lens-set-all '(1 2 3 4 5) 'a + first-lens + third-lens + fourth-lens) +]}