diff --git a/unstable/lens/main.rkt b/unstable/lens/main.rkt index e79e14f..6f516b7 100644 --- a/unstable/lens/main.rkt +++ b/unstable/lens/main.rkt @@ -6,6 +6,7 @@ "arrow.rkt" "isomorphism.rkt" "mapper.rkt" + "string-split.rkt" ) (provide (all-from-out "syntax.rkt" @@ -14,4 +15,5 @@ "arrow.rkt" "isomorphism.rkt" "mapper.rkt" + "string-split.rkt" )) diff --git a/unstable/lens/main.scrbl b/unstable/lens/main.scrbl index bf07f06..78219d2 100644 --- a/unstable/lens/main.scrbl +++ b/unstable/lens/main.scrbl @@ -15,3 +15,4 @@ this library being backwards-compatible. @include-section["arrow.scrbl"] @include-section["isomorphism.scrbl"] @include-section["mapper.scrbl"] +@include-section["string-split.scrbl"] diff --git a/unstable/lens/string-split.scrbl b/unstable/lens/string-split.scrbl new file mode 100644 index 0000000..40f613f --- /dev/null +++ b/unstable/lens/string-split.scrbl @@ -0,0 +1,26 @@ +#lang scribble/manual + +@(require lens/doc-util/main) + +@title{Splitting Strings} + +@defmodule[unstable/lens/string-split] + +@defproc[(string-split-lens [sep (or/c string? char? regexp?)]) lens?]{ +Creates a lens that splits a string into multiple pieces like +@racket[regexp-split] or @racket[string-split]. +@lenses-unstable-examples[ + (lens-view (string-split-lens ",") "a,b,c") + (lens-set (string-split-lens ",") "a,b,c" '("1" "2" "3")) +] +Lenses created by @racket[string-split-lens] do not trim strings first, so that +when viewing a target that either starts or ends with something matching +@racket[sep], the view will include empty strings as the first or last element, +which is consistant with @racket[regexp-split] or @racket[string-split] with +@racket[#:trim? #f]. This is also more useful when using @racket[lens-set]. +@lenses-unstable-examples[ + (lens-view (string-split-lens ",") ",b,c") + (lens-set (string-split-lens ",") ",b,c" '("a" "b" "c")) + (lens-view (string-split-lens ",") "a,b,c,") + (lens-set (string-split-lens ",") "a,b,c," '("a" "b" "c" "d")) +]}