From c9fa6fb8ea78142e0f529835f82d2026fb90af4b Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Mon, 31 Aug 2015 15:48:38 -0400 Subject: [PATCH] provide and document transformer-lens --- unstable/lens/main.rkt | 1 + unstable/lens/main.scrbl | 1 + unstable/lens/transformer.scrbl | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 unstable/lens/transformer.scrbl diff --git a/unstable/lens/main.rkt b/unstable/lens/main.rkt index 4393467..6c69a5e 100644 --- a/unstable/lens/main.rkt +++ b/unstable/lens/main.rkt @@ -13,4 +13,5 @@ "struct-nested.rkt" "sublist.rkt" "syntax.rkt" +"transformer.rkt" "view-set.rkt" diff --git a/unstable/lens/main.scrbl b/unstable/lens/main.scrbl index 10d51a5..2a2d1e9 100644 --- a/unstable/lens/main.scrbl +++ b/unstable/lens/main.scrbl @@ -26,6 +26,7 @@ this library being backwards-compatible. "struct-nested.scrbl" "sublist.scrbl" "syntax.scrbl" + "transformer.scrbl" "view-set.scrbl" ) diff --git a/unstable/lens/transformer.scrbl b/unstable/lens/transformer.scrbl new file mode 100644 index 0000000..f6275e5 --- /dev/null +++ b/unstable/lens/transformer.scrbl @@ -0,0 +1,26 @@ +#lang scribble/manual + +@(require lens/private/doc-util/main) + +@title{Lenses that transform subpieces} + +@defmodule[unstable/lens/transformer] + +@defproc[(transformer-lens [lens lens?] [transform-lens lens?]) lens?]{ +Creates a lens that transforms the subpiece of the target that @racket[lens] +views with @racket[transform-lens]. + +@racketblock[(lens-view (transformer-lens lens transform-lens) target)] +is equivalent to: +@racketblock[(lens-transform lens target (λ (v) (lens-view transform-lens v)))] + +@lens-unstable-examples[ + (define first-sym->str + (transformer-lens first-lens symbol->string-lens)) + (lens-view first-sym->str '(a b c)) + (lens-set first-sym->str '(a b c) '("a" b c)) + (lens-set first-sym->str '(a b c) '("z" b c)) + (lens-set first-sym->str '(a b c) '("z" bee sea)) + (lens-view first-sym->str (lens-set first-sym->str '(a b c) '("z" bee sea))) +]} +