define-type-alias supports type constructors
This commit is contained in:
parent
4a44e51b80
commit
6f48690446
|
@ -21,7 +21,11 @@
|
|||
(define-syntax define-type-alias
|
||||
(syntax-parser
|
||||
[(_ alias:id τ:type)
|
||||
#'(define-syntax alias (make-variable-like-transformer #'τ.norm) #;(syntax-parser [x:id #'τ.norm]))]))
|
||||
#'(define-syntax alias (make-variable-like-transformer #'τ.norm) #;(syntax-parser [x:id #'τ.norm]))]
|
||||
[(_ (f:id x:id ...) ty)
|
||||
#'(define-syntax (f stx)
|
||||
(syntax-parse stx
|
||||
[(_ x ...) #'ty]))]))
|
||||
|
||||
(define-typed-syntax define
|
||||
[(_ x:id e)
|
||||
|
|
|
@ -13,3 +13,4 @@
|
|||
(let ([y (f x)]) x))
|
||||
|
||||
(check-type try : (→/test X (→ X Y) X))
|
||||
|
||||
|
|
|
@ -38,3 +38,26 @@
|
|||
[else (ok 0)]))
|
||||
|
||||
(check-type f/cond : (→/test Bool (Result Int String)))
|
||||
|
||||
(define-type-alias (Read-Result A) (Result (× A (List Char)) String))
|
||||
|
||||
(define (alias-test -> (Read-Result A))
|
||||
(Error "asd"))
|
||||
|
||||
(check-type alias-test : (→/test (Result (× A (List Char)) String)))
|
||||
(check-type alias-test : (→/test (Read-Result A)))
|
||||
|
||||
(define (alias-test2 [in : A] -> (Read-Result A))
|
||||
(ok (tup in nil)))
|
||||
(define (alias-test3 [in : A] -> (Read-Result A))
|
||||
(ok (tup in (list #\a #\b #\c))))
|
||||
|
||||
(check-type alias-test2 : (→/test A (Result (× A (List Char)) String)))
|
||||
(check-type alias-test2 : (→/test A (Read-Result A)))
|
||||
(check-type alias-test3 : (→/test A (Result (× A (List Char)) String)))
|
||||
(check-type alias-test3 : (→/test A (Read-Result A)))
|
||||
|
||||
(check-type alias-test2 : (→/test B (Result (× B (List Char)) String)))
|
||||
(check-type alias-test2 : (→/test B (Read-Result B)))
|
||||
(check-type alias-test3 : (→/test B (Result (× B (List Char)) String)))
|
||||
(check-type alias-test3 : (→/test B (Read-Result B)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user