add lenses/applicable

This commit is contained in:
AlexKnauth 2015-06-24 17:59:38 -04:00
parent aa8d896c8d
commit c837f1da5e
2 changed files with 51 additions and 0 deletions

42
lenses/applicable.rkt Normal file
View File

@ -0,0 +1,42 @@
#lang racket/base
(provide (all-defined-out)
lens/c let-lens lens-view lens-set lens-transform lens-struct lens-proc)
(require (prefix-in - "main.rkt")
(only-in "main.rkt"
lens/c let-lens lens-view lens-set lens-transform lens-struct lens-proc))
(define (make-lens getter setter)
(lens-struct (-make-lens getter setter)))
(define (lens-compose . args)
(lens-struct (apply -lens-compose args)))
(define identity-lens
(lens-struct -identity-lens))
(define (list-lens n)
(lens-struct (-list-lens n)))
(define first-lens (lens-struct -first-lens))
(define second-lens (lens-struct -second-lens))
(define third-lens (lens-struct -third-lens))
(define fourth-lens (lens-struct -fourth-lens))
(define fifth-lens (lens-struct -fifth-lens))
(define (assoc-lens key #:is-equal? [key-equal? equal?])
(lens-struct (-assoc-lens key #:is-equal? key-equal?)))
(define (assv-lens key)
(lens-struct (-assv-lens key)))
(define (assq-lens key)
(lens-struct (-assq-lens key)))
(define-syntax-rule (syntax-lens target-id pattern)
(lens-struct (-syntax-lens target-id pattern)))
(define-syntax-rule (syntax-keyword-seq-lens kw)
(lens-struct (-syntax-keyword-seq-lens kw)))

View File

@ -251,3 +251,12 @@ used directly as a getter procedure.
Gets a lens function. If @racket[lens] is a lens function but not a lens
struct, returns the @racket[lens].
}
@section{lenses/applicable}
@defmodule[lenses/applicable]
This module provides the same functions as @racketmodname[lenses], but lenses
are provided as applicable lens structs, and functions that return lenses return
lens structs.