102 lines
2.6 KiB
Racket
102 lines
2.6 KiB
Racket
#lang typed-scheme
|
|
|
|
(define: x : (U Number #f) 1)
|
|
(if x #{x :: Number} 1)
|
|
(lambda () 1)
|
|
(lambda: ([y : Number]) (if #t y y))
|
|
|
|
(plambda: (a) ([y : Number]) (if y #t #f))
|
|
(plambda: (a) ([y : a]) y)
|
|
(plambda: (a) ([y : a]) y)
|
|
(plambda: () ([y : Boolean]) (if y #t #f))
|
|
|
|
#{(if #t #t #t) :: Boolean}
|
|
|
|
(let () 3)
|
|
(let ([x 1] [y 2]) x)
|
|
#{(let ([x 1] [y 2]) x) :: Number}
|
|
(let: ([x : Number 1] [y : Integer 2]) x)
|
|
#{(let: ([x : Integer 1] [y : Integer 2]) x) :: Integer}
|
|
|
|
#{(let*: ([x : Number 1] [x : Integer 2]) x) :: Integer}
|
|
#{(let*: ([x : Number 1] [x : Integer 2]) #{x :: Integer}) :: Integer}
|
|
|
|
#{(letrec: ([x : Integer 1] [y : Integer 2]) #{x :: Integer}) :: Integer}
|
|
(letrec: ([x : Integer 1] [y : Integer 2]) #{x :: Integer})
|
|
(let ()
|
|
(define x 1)
|
|
(define y 2)
|
|
x)
|
|
(letrec: ([z : (-> Any) (lambda () z)]) 1)
|
|
(letrec: ([z : (-> Any) (lambda () w)]
|
|
[w : (-> Any) (lambda () z)]) z)
|
|
(let ()
|
|
(define: (z) : Any w)
|
|
(define: (w) : Any z)
|
|
z)
|
|
(let ()
|
|
(define: (z [x : Number]) : Any w)
|
|
(define: (w) : Any z)
|
|
z)
|
|
(case-lambda: [() 1]
|
|
[([x : Number]) x])
|
|
;; Error
|
|
#;#{(case-lambda: [() 1]
|
|
[([x : Number]) x]) :: String}
|
|
#{(lambda: ([x : Number]) 1) :: (Number -> Number)}
|
|
#{(lambda: ([x : Number]) 1) :: Any}
|
|
#{(lambda: ([x : Number]) 1) :: (Integer -> Any)}
|
|
#{(lambda: ([x : Number]) x) :: (Number -> Number)}
|
|
#{(lambda: ([x : Number]) x) :: (Integer -> Any)}
|
|
(define zzz 1)
|
|
(set! zzz 2)
|
|
|
|
(define-struct: xxx ())
|
|
(define-struct: xxx2 ([y : Number]))
|
|
(define-struct: xxx3 ([y : Number] [z : Number]))
|
|
(define-struct: xxx4 ([y : Number] [z : xxx4]))
|
|
(define-struct: xxx5 ([y : Number] [z : xxx4]))
|
|
(define-struct: (A) xxx6 ([y : A] [z : xxx4]))
|
|
xxx6-y
|
|
(with-continuation-mark ((inst make-continuation-mark-key Integer)) 1 1)
|
|
'foo
|
|
'(foo foo foo)
|
|
(define-type-alias NNN Number)
|
|
(define-type-alias (NNN2 A) (Listof Number))
|
|
(define-type-alias (NNN3 A) (Listof A))
|
|
(define-syntax-rule (m x) 1)
|
|
(m 2)
|
|
#{1 :: 1}
|
|
(lambda: ([x : String]) (lambda () (set! x "foo")))
|
|
#'(x y z)
|
|
(begin0 1 1 1)
|
|
(begin 1 1 1)
|
|
(#%expression (begin 1 1 1))
|
|
|
|
(values 1)
|
|
(values 1 1)
|
|
(values)
|
|
|
|
(: ff (Number -> Number))
|
|
(define (ff x) x)
|
|
(ff 1)
|
|
|
|
(lambda: ([y : String][x : Number]) (values 1 x 1))
|
|
(lambda: ([x : Number]) (values 1 x 1))
|
|
(lambda () (values 1 1))
|
|
(lambda () 1)
|
|
#{(lambda (x) x) :: (Number -> Number)}
|
|
|
|
{ann (values (lambda (x) x) (lambda (x) x)) (values (Number -> Number) (String -> String))}
|
|
|
|
(list 1 2 3)
|
|
(ann (list 1 2 3) (Pair Number (Listof Integer)))
|
|
(ann (list 1 2 3) (Listof Integer))
|
|
(ann (list 1 2 3) (Listof Number))
|
|
|
|
(list* 1 2 3)
|
|
(ann (list* 1 2 3 (list)) (Pair Number (Listof Integer)))
|
|
|
|
((lambda (x) 1) 1)
|
|
((lambda (x y) 1) 1 2)
|