From c4e253d2d18020b428612227dac6bd789b59d43c Mon Sep 17 00:00:00 2001 From: Stevie Strickland Date: Mon, 16 Jun 2008 13:01:16 -0400 Subject: [PATCH] Change over some of the base environment over to dotted types. --- collects/typed-scheme/private/base-env.ss | 25 ++++++++----------- .../private/type-effect-convenience.ss | 17 +++++++++++++ 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/collects/typed-scheme/private/base-env.ss b/collects/typed-scheme/private/base-env.ss index 0b8695a31e..397aacef0c 100644 --- a/collects/typed-scheme/private/base-env.ss +++ b/collects/typed-scheme/private/base-env.ss @@ -1,9 +1,11 @@ + #lang scheme/base ;; these are libraries providing functions we add types to that are not in scheme/base (require "extra-procs.ss" (only-in scheme/list cons? take drop add-between last) + (only-in rnrs/lists-6 fold-left) '#%paramz (only-in scheme/match/runtime match:error)) @@ -99,11 +101,8 @@ [read (cl-> [(-Port) -Sexp] [() -Sexp])] - [ormap (-poly (a b) ((-> a b) (-lst a) . -> . b))] - [andmap (-poly (a b c d e) - (cl->* - ((-> a b) (-lst a) . -> . b) - ((-> c d e) (-lst c) (-lst d) . -> . e)))] + [ormap (-polydots (a b) (->... (list (->... (list a) (b b) B) (-lst a)) ((-lst b) b) B))] + [andmap (-polydots (a b) (->... (list (->... (list a) (b b) B) (-lst a)) ((-lst b) b) B))] [newline (cl-> [() -Void] [(-Port) -Void])] [not (-> Univ B)] @@ -122,16 +121,12 @@ [list? (make-pred-ty (-lst Univ))] [list (-poly (a) (->* '() a (-lst a)))] [procedure? (make-pred-ty (make-Function (list (make-top-arr))))] - [map - (-poly (a b c d) - (cl-> [((-> a b) (-lst a)) (-lst b)] - [((-> a b c) (-lst a) (-lst b)) (-lst c)] - [((-> a b c d) (-lst a) (-lst b) (-lst c)) (-lst d)]))] - [for-each - (-poly (a b c d) - (cl-> [((-> a b) (-lst a)) -Void] - [((-> a b c) (-lst a) (-lst b)) -Void] - [((-> a b c d) (-lst a) (-lst b) (-lst c)) -Void]))] + [map (-polydots (c a b) ((list ((list a) (b b) . ->... . c) (-lst a)) + ((-lst b) b) . ->... .(-lst c)))] + [for-each (-polydots (c a b) ((list ((list a) (b b) . ->... . -Void) (-lst a)) + ((-lst b) b) . ->... . -Void))] + [fold-left (-polydots (c a b) ((list ((list c a) (b b) . ->... . c) c (-lst a)) + ((-lst b) b) . ->... . c))] [foldl (-poly (a b c) (cl-> [((a b . -> . b) b (make-lst a)) b] diff --git a/collects/typed-scheme/private/type-effect-convenience.ss b/collects/typed-scheme/private/type-effect-convenience.ss index 22205b8d12..2ceb2f13db 100644 --- a/collects/typed-scheme/private/type-effect-convenience.ss +++ b/collects/typed-scheme/private/type-effect-convenience.ss @@ -52,6 +52,16 @@ (make-Function (list (make-arr* dom rng #f eff1 eff2)))] [(_ dom rst rng : eff1 eff2) (make-Function (list (make-arr* dom rng rst eff1 eff2)))])) +(define-syntax ->... + (syntax-rules (:) + [(_ dom rng) + (->* dom rng)] + [(_ dom (dty dbound) rng) + (make-Function (list (make-arr* dom rng #f (cons dty 'dbound) (list) (list))))] + [(_ dom rng : eff1 eff2) + (->* dom rng : eff1 eff2)] + [(_ dom (dty dbound) rng : eff1 eff2) + (make-Function (list (make-arr* dom rng #f (cons dty 'dbound) eff1 eff2)))])) (define-syntax cl-> (syntax-rules (:) [(_ [(dom ...) rng] ...) @@ -114,6 +124,13 @@ (let ([vars (-v vars)] ...) (make-Poly (list 'vars ...) ty))])) +(define-syntax -polydots + (syntax-rules () + [(_ (vars ... dotted) ty) + (let ([dotted (-v dotted)] + [vars (-v vars)] ...) + (make-PolyDots (list 'vars ... 'dotted) ty))])) + (define-syntax -mu (syntax-rules () [(_ var ty)