36 lines
828 B
Racket
36 lines
828 B
Racket
#lang typed-scheme
|
|
(define-type-alias number Number)
|
|
(define-type-alias boolean Boolean)
|
|
(define-type-alias top Any)
|
|
|
|
(define: a : (number -> number) (lambda: ([x : number]) x))
|
|
(define: f : (case-lambda (number -> number)
|
|
(boolean boolean -> boolean))
|
|
(case-lambda
|
|
[(#{x : number}) (add1 x)]
|
|
[(#{a : boolean} #{b : boolean}) (and a b)]))
|
|
|
|
(define: f* : (case-lambda (number -> number)
|
|
(boolean boolean -> boolean))
|
|
(case-lambda:
|
|
[([x : number]) (add1 x)]
|
|
[([a : boolean] [b : boolean]) (and a b)]))
|
|
|
|
(f 5)
|
|
|
|
(f #t #f)
|
|
|
|
#;(f #t)
|
|
|
|
(define-type-alias idfunty (All (a) (a -> a)))
|
|
(define-type-alias (idfunty2 a) (a -> a))
|
|
|
|
(define: g : (idfunty number) (lambda: ([x : number]) x))
|
|
|
|
(define: (h [f : (idfunty number)]) : number (f 5))
|
|
(define: (h* [f : (idfunty2 number)]) : number (f 5))
|
|
|
|
(h f*)
|
|
(h* f*)
|
|
|