Instantiation appears to work.

original commit: e912818f866d6bcbeb43e4567ba9d0f1d58d6e3c
This commit is contained in:
Sam Tobin-Hochstadt 2008-06-10 14:10:40 -04:00
parent d071154438
commit d6f8dfc983
4 changed files with 23 additions and 3 deletions

View File

@ -498,6 +498,20 @@
[syntax? (make-pred-ty (-Syntax Univ))]
[syntax-property (-poly (a) (cl->* (-> (-Syntax a) Univ Univ (-Syntax a))
(-> (-Syntax Univ) Univ Univ)))]
;; experimental
[map* (make-PolyDots
(list 'a 'b 'c)
(make-Function
(list
(make-arr-dots
(list (make-Function (list (make-arr-dots (list (-v b)) (-v a) (-v c) 'c)))
(-lst (-v b)))
(-lst (-v a))
(-lst (-v c))
'c))))]
)))
(begin-for-syntax

View File

@ -1,7 +1,11 @@
#lang scheme/base
(provide assert)
(provide assert map*)
(define (assert v)
(unless v
(error "Assertion failed - value was #f"))
v)
(define map* map)

View File

@ -52,7 +52,7 @@
(when rest
(fp "~a* " rest))
(when drest
(fp "~a ..." drest))
(fp "~a ... ~a " (car drest) (cdr drest)))
(fp "-> ~a" rng)
(unless (and (null? thn-eff) (null? els-eff))
(fp " : ~a ~a" thn-eff els-eff))
@ -115,6 +115,8 @@
[(Poly-names: names body)
#;(fprintf (current-error-port) "POLY SEQ: ~a~n" (Type-seq body))
(fp "(All ~a ~a)" names body)]
[(PolyDots-names: (list names ... dotted) body)
(fp "(All ~a ~a)" (append names (list dotted '...)) body)]
#;
[(Mu-unsafe: b) (fp "(unsafe-mu ~a ~a)" (Type-seq c) b)]
[(Mu: x (Syntax: (Union: (list

View File

@ -33,7 +33,7 @@
(begin
(when (and (pair? drest)
(eq? name (cdr drest)))
(int-err "substitute used on ... variable ~a" name))
(int-err "substitute used on ... variable ~a in type ~a" name target))
(make-arr (map sb dom)
(sb rng)
(and rest (sb rest))