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