diff --git a/unstable/lens/define-nested.scrbl b/unstable/lens/define-nested.scrbl new file mode 100644 index 0000000..d4155b5 --- /dev/null +++ b/unstable/lens/define-nested.scrbl @@ -0,0 +1,23 @@ +#lang scribble/manual + +@(require lens/private/doc-util/main) + +@title{Lenses for nested data} + +@defmodule[unstable/lens/define-nested] + +@defform[(define-nested-lenses [base-id base-lens-expr] clause ...) + #:grammar ([clause [sub-id sub-lens-expr]])]{ +A shorthand for defining composed lenses for nested data structures. + +For example, if there is a @racket[top] struct containing a +@racket[middle] struct, which contains an @racket[x] field and a +@racket[y] field, a form like: +@(racketblock + (define-nested-lenses [top-middle top-middle-lens] + [x middle-x-lens] + [y middle-y-lens])) +Will define @racket[top-middle-x-lens] and @racket[top-middle-y-lens] +as @racket[(lens-thrush top-middle-lens middle-x-lens)] and +@racket[(lens-thrush top-middle-lens middle-y-lens)]. +} diff --git a/unstable/lens/main.rkt b/unstable/lens/main.rkt index 2ceccd9..9c8fa8e 100644 --- a/unstable/lens/main.rkt +++ b/unstable/lens/main.rkt @@ -1,5 +1,6 @@ #lang reprovide "arrow.rkt" +"define-nested.rkt" "dict-nested.rkt" "hash-filterer.rkt" "if.rkt" diff --git a/unstable/lens/main.scrbl b/unstable/lens/main.scrbl index a9445e7..0fa88ee 100644 --- a/unstable/lens/main.scrbl +++ b/unstable/lens/main.scrbl @@ -13,6 +13,7 @@ this library being backwards-compatible. @(include-sections "arrow.scrbl" + "define-nested.scrbl" "dict-nested.scrbl" "hash-filterer.scrbl" "if.scrbl"