From 6a3dbebd0771692e05cb96c4d891d11433bf2d31 Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Thu, 19 Jun 2008 18:04:19 -0400 Subject: [PATCH] Do substitution properly from dmap. original commit: 0f142d97e3d2d995fa18f694e211cbdabf814bbf --- collects/typed-scheme/private/type-utils.ss | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/collects/typed-scheme/private/type-utils.ss b/collects/typed-scheme/private/type-utils.ss index 4022514d..c78ea3ea 100644 --- a/collects/typed-scheme/private/type-utils.ss +++ b/collects/typed-scheme/private/type-utils.ss @@ -54,7 +54,6 @@ (define (sb t) (substitute-dots images name t)) (if (hash-ref (free-vars* target) name #f) (type-case sb target - [#:F name* target] [#:arr dom rng rest drest thn-eff els-eff (if (and (pair? drest) (eq? name (cdr drest))) @@ -101,7 +100,14 @@ ;; substitution = Listof[List[Name,Type]] ;; subst-all : substition Type -> Type (define (subst-all s t) - (foldr (lambda (e acc) (substitute (cadr e) (car e) acc)) t s)) + (for/fold ([t t]) ([e s]) + (match e + [(list v (list imgs ...) #f) + (substitute-dots imgs v t)] + [(list v (list ts) starred) + (int-err "subst-all: nyi")] + [(list v img) + (substitute img v t)]))) ;; unfold : Type -> Type