add struct and dict lenses to main.rkt

This commit is contained in:
AlexKnauth 2015-07-08 11:23:03 -04:00
parent f763204514
commit 92a90d619c
4 changed files with 10 additions and 12 deletions

View File

@ -3,19 +3,15 @@
@(require scribble/eval @(require scribble/eval
"lenses-examples.rkt" "lenses-examples.rkt"
(for-label lens (for-label lens
lens/dict
racket/base racket/base
racket/contract)) racket/contract))
@title{Dict lenses} @title{Dict lenses}
@defmodule[lens/dict]
@defproc[(dict-ref-lens [key any/c]) lens?]{ @defproc[(dict-ref-lens [key any/c]) lens?]{
Returns a lens for viewing the value mapped to @racket[key] in a dict. Returns a lens for viewing the value mapped to @racket[key] in a dict.
@lenses-examples[ @lenses-examples[
(require lens/dict)
(define dict '((a . 1) (b . 2) (c . 3))) (define dict '((a . 1) (b . 2) (c . 3)))
(lens-view (dict-ref-lens 'a) dict) (lens-view (dict-ref-lens 'a) dict)
(lens-set (dict-ref-lens 'a) dict 100) (lens-set (dict-ref-lens 'a) dict 100)

View File

@ -2,13 +2,19 @@
(require (require
"base/main.rkt" "base/main.rkt"
"list/main.rkt") "list/main.rkt"
"struct.rkt"
"dict.rkt"
)
(provide (provide
(except-out (except-out
(all-from-out (all-from-out
"base/main.rkt" "base/main.rkt"
"list/main.rkt") "list/main.rkt"
"struct.rkt"
"dict.rkt"
)
focus-lens focus-lens
drop-lens drop-lens
list-ref-nested-lens list-ref-nested-lens

View File

@ -5,13 +5,13 @@
(require racket/local (require racket/local
syntax/parse/define syntax/parse/define
alexis/util/struct alexis/util/struct
"main.rkt" "base/main.rkt"
(for-syntax racket/base (for-syntax racket/base
syntax/parse syntax/parse
racket/syntax racket/syntax
)) ))
(module+ test (module+ test
(require rackunit fancy-app (only-in lens/base/main lens-transform*))) (require rackunit fancy-app))
(define-simple-macro (struct-lens s:id fld:id) (define-simple-macro (struct-lens s:id fld:id)
#:with s-fld (format-id #'s "~a-~a" #'s #'fld #:source #'fld) #:with s-fld (format-id #'s "~a-~a" #'s #'fld #:source #'fld)

View File

@ -3,20 +3,16 @@
@(require scribble/eval @(require scribble/eval
"lenses-examples.rkt" "lenses-examples.rkt"
(for-label lens (for-label lens
lens/struct
racket/base racket/base
racket/contract)) racket/contract))
@title{Struct lenses} @title{Struct lenses}
@defmodule[lens/struct]
@defform[(struct-lens struct-id field-id)]{ @defform[(struct-lens struct-id field-id)]{
Returns a lens for viewing the @racket[field-id] field of Returns a lens for viewing the @racket[field-id] field of
a @racket[struct-id] instance. a @racket[struct-id] instance.
@lenses-examples[ @lenses-examples[
(require lens/struct)
(struct foo (a b c) #:transparent) (struct foo (a b c) #:transparent)
(lens-view (struct-lens foo a) (foo 1 2 3)) (lens-view (struct-lens foo a) (foo 1 2 3))
(lens-set (struct-lens foo a) (foo 1 2 3) 100) (lens-set (struct-lens foo a) (foo 1 2 3) 100)