From 94a13eccaaa5dd13e73992b3b3f0707def8423b1 Mon Sep 17 00:00:00 2001 From: Jack Firth Date: Wed, 8 Jul 2015 10:06:39 -0700 Subject: [PATCH] Add set* and transform* contracts --- lens/base/transform.rkt | 10 ++++++---- lens/base/view-set.rkt | 10 ++++++---- lens/list-pair-contract.rkt | 10 ++++++++++ 3 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 lens/list-pair-contract.rkt diff --git a/lens/base/transform.rkt b/lens/base/transform.rkt index 7909070..1b4fd34 100644 --- a/lens/base/transform.rkt +++ b/lens/base/transform.rkt @@ -1,16 +1,18 @@ #lang racket (require unstable/sequence - "base.rkt") + "base.rkt" + "../list-pair-contract.rkt") (module+ test (require rackunit fancy-app)) (provide - lens-transform* - (contract-out [lens-transform (-> lens? any/c (-> any/c any/c) any/c)])) - + (contract-out + [lens-transform (-> lens? any/c (-> any/c any/c) any/c)] + [lens-transform* (->* (any/c) #:rest (listof2 lens? (-> any/c any/c)) any/c)])) + (define (listof* . contracts) diff --git a/lens/base/view-set.rkt b/lens/base/view-set.rkt index c58b1e5..c63424b 100644 --- a/lens/base/view-set.rkt +++ b/lens/base/view-set.rkt @@ -2,15 +2,17 @@ (require unstable/sequence fancy-app - "base.rkt") + "base.rkt" + "../list-pair-contract.rkt") + (module+ test (require rackunit)) (provide - lens-set* (contract-out [lens-view (-> lens? any/c any/c)] - [lens-view* (->* [any/c] #:rest (listof lens?) any/c)] - [lens-set (-> lens? any/c any/c any/c)])) + [lens-view* (->* (any/c) #:rest (listof lens?) any/c)] + [lens-set (-> lens? any/c any/c any/c)] + [lens-set* (->* (any/c) #:rest (listof2 lens? any/c) any/c)])) (define (lens-view lens v) diff --git a/lens/list-pair-contract.rkt b/lens/list-pair-contract.rkt new file mode 100644 index 0000000..411a3e3 --- /dev/null +++ b/lens/list-pair-contract.rkt @@ -0,0 +1,10 @@ +#lang racket + +(provide + (contract-out [listof2 (-> contract? contract? contract?)])) + + +(define (listof2 first-val/c second-val/c) + (define c + (or/c empty? (cons/c first-val/c (cons/c second-val/c (recursive-contract c))))) + c)