From f1cd9ff5a5abaeef1e361f6fa8a250352c3d92eb Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Wed, 29 Jul 2015 10:32:42 -0400 Subject: [PATCH] document match-lens and provide from unstable/lens --- unstable/lens/main.rkt | 2 ++ unstable/lens/main.scrbl | 1 + unstable/lens/match.scrbl | 21 +++++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 unstable/lens/match.scrbl diff --git a/unstable/lens/main.rkt b/unstable/lens/main.rkt index 6f516b7..76dc064 100644 --- a/unstable/lens/main.rkt +++ b/unstable/lens/main.rkt @@ -7,6 +7,7 @@ "isomorphism.rkt" "mapper.rkt" "string-split.rkt" + "match.rkt" ) (provide (all-from-out "syntax.rkt" @@ -16,4 +17,5 @@ "isomorphism.rkt" "mapper.rkt" "string-split.rkt" + "match.rkt" )) diff --git a/unstable/lens/main.scrbl b/unstable/lens/main.scrbl index 78219d2..8855265 100644 --- a/unstable/lens/main.scrbl +++ b/unstable/lens/main.scrbl @@ -16,3 +16,4 @@ this library being backwards-compatible. @include-section["isomorphism.scrbl"] @include-section["mapper.scrbl"] @include-section["string-split.scrbl"] +@include-section["match.scrbl"] diff --git a/unstable/lens/match.scrbl b/unstable/lens/match.scrbl new file mode 100644 index 0000000..2cf028d --- /dev/null +++ b/unstable/lens/match.scrbl @@ -0,0 +1,21 @@ +#lang scribble/manual + +@(require lens/doc-util/main) + +@title{Lenses based on match patterns} + +@defform[(match-lens id pattern replacement)]{ +Creates a lens for viewing the @racket[id] within the @racket[pattern]. + +The @racket[replacement] expression should be an expression such that +@racket[(match target [pattern replacement])] produces a value equivalent to +@racket[target], and should use @racket[id] as the view. +@lenses-unstable-examples[ + (define car-lens (match-lens a (cons a b) (cons a b))) + (define cdr-lens (match-lens b (cons a b) (cons a b))) + (define third-lens (match-lens c (list a b c d ...) (list* a b c d))) + (define vector-second-lens (match-lens b (vector a b c ...) (apply vector a b c))) + (define v2-of-l3-lens (match-lens d + (list a b (vector c d e ...) f ...) + (list* a b (apply vector c d e) f))) +]}