From 583b6408338ce0de5f6ac41dfb49817967b655b8 Mon Sep 17 00:00:00 2001 From: Sam Tobin-Hochstadt Date: Tue, 10 Jun 2008 11:29:56 -0400 Subject: [PATCH] Fix instantiate and abstract to handle bounds properly. NEW INVARIANT - only use instantiate w/ names original commit: 017f756c7735a0e6083fa2f52eaafc0f20b11912 --- collects/typed-scheme/private/resolve-type.ss | 2 +- collects/typed-scheme/private/type-utils.ss | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/collects/typed-scheme/private/resolve-type.ss b/collects/typed-scheme/private/resolve-type.ss index 28385b80..d68de692 100644 --- a/collects/typed-scheme/private/resolve-type.ss +++ b/collects/typed-scheme/private/resolve-type.ss @@ -1,7 +1,7 @@ #lang scheme/base (require "type-rep.ss" "type-name-env.ss" "tc-utils.ss" - "type-utils.ss" + "type-utils.ss" mzlib/plt-match mzlib/trace) diff --git a/collects/typed-scheme/private/type-utils.ss b/collects/typed-scheme/private/type-utils.ss index c4e1fa84..b82bf64a 100644 --- a/collects/typed-scheme/private/type-utils.ss +++ b/collects/typed-scheme/private/type-utils.ss @@ -17,7 +17,8 @@ tc-result: tc-result-equal? effects-equal? - tc-result-t) + tc-result-t + unfold) ;; substitute : Type Name Type -> Type @@ -35,7 +36,12 @@ (foldr (lambda (e acc) (substitute (cadr e) (car e) acc)) t s)) - +;; unfold : Type -> Type +;; must be applied to a Mu +(define (unfold t) + (match t + [(Mu: name b) (substitute t name b)] + [_ (int-err "unfold: requires Mu type, got ~a" t)])) (define (instantiate-poly t types) (match t