From 669aff7cdf43b35802a14793a43ed3295c5b9143 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Sun, 27 Sep 2015 00:54:54 -0400 Subject: [PATCH 1/3] add struct-lenses-out and struct+lenses-out --- lens/private/struct/struct.rkt | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/lens/private/struct/struct.rkt b/lens/private/struct/struct.rkt index d3fcd61..c5ef31d 100644 --- a/lens/private/struct/struct.rkt +++ b/lens/private/struct/struct.rkt @@ -2,6 +2,7 @@ (require syntax/parse/define alexis/util/struct + racket/provide-syntax "../base/main.rkt" (submod alexis/util/struct get-struct-accessors) (for-syntax racket/base @@ -15,7 +16,9 @@ "../test-util/test-lens.rkt")) (provide define-struct-lenses - struct/lens) + struct/lens + struct-lenses-out + struct+lenses-out) (define-for-syntax (get-struct-field-ids struct-info failure-context) @@ -55,6 +58,18 @@ (struct s (field-spec ...) option ...) (define-struct-lenses s))) +(define-provide-syntax struct-lenses-out + (syntax-parser + [(struct-lenses-out struct-type:id) + #:do [(define field-ids (get-struct-id-field-ids #'struct-type))] + #:with [lens-id ...] (map-format-id #'struct-type "~a-lens" field-ids) + #'(combine-out lens-id ...)])) + +(define-provide-syntax struct+lenses-out + (syntax-parser + [(struct+lenses-out struct-type:id) + #'(combine-out (struct-out struct-type) (struct-lenses-out struct-type))])) + (module+ test (struct/lens foo (a b c d) #:transparent) (check-lens-view foo-b-lens (foo 1 2 3 4) 2) From c216175f31c72c02ae7a231cc4a18d9179a86337 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Sun, 27 Sep 2015 00:58:00 -0400 Subject: [PATCH 2/3] document struct-lenses-out and struct+lenses-out --- lens/private/struct/struct.scrbl | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lens/private/struct/struct.scrbl b/lens/private/struct/struct.scrbl index dbf7cbc..1c36b78 100644 --- a/lens/private/struct/struct.scrbl +++ b/lens/private/struct/struct.scrbl @@ -19,3 +19,13 @@ (lens-view foo-a-lens (foo 1 2 3)) (lens-set foo-a-lens (foo 1 2 3) 100) ]} + +@defform[(struct-lenses-out struct-id)]{ +A @racket[provide] sub-form that provides the lenses defined by +@racket[define-struct-lenses] or @racket[struct/lens]. +} + +@defform[(struct+lenses-out struct-id)]{ +A @racket[provide] sub-form short for using both @racket[struct-out] and +@racket[struct-lenses-out]. +} From 42c9a5f2c5eb1d5ec45fd6a9e54d8d3f24ae9ea6 Mon Sep 17 00:00:00 2001 From: AlexKnauth Date: Sun, 27 Sep 2015 01:17:31 -0400 Subject: [PATCH 3/3] provide from unstable instead of main lens collection --- lens/private/struct/main.rkt | 6 ++++-- lens/private/struct/struct.scrbl | 10 ---------- unstable/lens/main.rkt | 1 + unstable/lens/main.scrbl | 1 + unstable/lens/struct-provide.rkt | 4 ++++ unstable/lens/struct-provide.scrbl | 17 +++++++++++++++++ 6 files changed, 27 insertions(+), 12 deletions(-) create mode 100644 unstable/lens/struct-provide.rkt create mode 100644 unstable/lens/struct-provide.scrbl diff --git a/lens/private/struct/main.rkt b/lens/private/struct/main.rkt index 5d8ab08..cb72ae6 100644 --- a/lens/private/struct/main.rkt +++ b/lens/private/struct/main.rkt @@ -1,3 +1,5 @@ -#lang reprovide +#lang sweet-exp reprovide "field.rkt" -"struct.rkt" +except-in "struct.rkt" + struct-lenses-out + struct+lenses-out diff --git a/lens/private/struct/struct.scrbl b/lens/private/struct/struct.scrbl index 1c36b78..dbf7cbc 100644 --- a/lens/private/struct/struct.scrbl +++ b/lens/private/struct/struct.scrbl @@ -19,13 +19,3 @@ (lens-view foo-a-lens (foo 1 2 3)) (lens-set foo-a-lens (foo 1 2 3) 100) ]} - -@defform[(struct-lenses-out struct-id)]{ -A @racket[provide] sub-form that provides the lenses defined by -@racket[define-struct-lenses] or @racket[struct/lens]. -} - -@defform[(struct+lenses-out struct-id)]{ -A @racket[provide] sub-form short for using both @racket[struct-out] and -@racket[struct-lenses-out]. -} diff --git a/unstable/lens/main.rkt b/unstable/lens/main.rkt index 3850189..8d9b2de 100644 --- a/unstable/lens/main.rkt +++ b/unstable/lens/main.rkt @@ -13,6 +13,7 @@ "string-split.rkt" "struct-join.rkt" "struct-nested.rkt" +"struct-provide.rkt" "sublist.rkt" "syntax.rkt" "view-set.rkt" diff --git a/unstable/lens/main.scrbl b/unstable/lens/main.scrbl index cdf76cd..60270e7 100644 --- a/unstable/lens/main.scrbl +++ b/unstable/lens/main.scrbl @@ -26,6 +26,7 @@ this library being backwards-compatible. "string-split.scrbl" "struct-join.scrbl" "struct-nested.scrbl" + "struct-provide.scrbl" "sublist.scrbl" "syntax.scrbl" "view-set.scrbl" diff --git a/unstable/lens/struct-provide.rkt b/unstable/lens/struct-provide.rkt new file mode 100644 index 0000000..d9601dd --- /dev/null +++ b/unstable/lens/struct-provide.rkt @@ -0,0 +1,4 @@ +#lang sweet-exp reprovide +only-in lens/private/struct/struct + struct-lenses-out + struct+lenses-out diff --git a/unstable/lens/struct-provide.scrbl b/unstable/lens/struct-provide.scrbl new file mode 100644 index 0000000..3eee241 --- /dev/null +++ b/unstable/lens/struct-provide.scrbl @@ -0,0 +1,17 @@ +#lang scribble/manual + +@(require lens/private/doc-util/main) + +@title{Struct-lens provide forms} + +@defmodule[unstable/lens/struct-provide] + +@defform[(struct-lenses-out struct-id)]{ +A @racket[provide] sub-form that provides the lenses defined by +@racket[define-struct-lenses] or @racket[struct/lens]. +} + +@defform[(struct+lenses-out struct-id)]{ +A @racket[provide] sub-form short for using both @racket[struct-out] and +@racket[struct-lenses-out]. +}