typed-racket/typed-racket-test/succeed/fix.rkt
2014-12-16 10:07:25 -05:00

16 lines
548 B
Racket

#lang typed-scheme
(: make-recursive : (All (S T) (((S -> T) -> (S -> T)) -> (S -> T))))
(define (make-recursive f)
(define-type-alias Tau (Rec Tau (Tau -> (S -> T))))
((lambda: ([x : Tau]) (f (lambda: ([z : S]) ((x x) z))))
(lambda: ([x : Tau]) (f (lambda: ([z : S]) ((x x) z))))))
(: fact : (Number -> Number))
(define fact (make-recursive
(lambda: ([fact : (Number -> Number)])
(lambda: ([n : Number])
(if (zero? n)
1
(* n (fact (- n 1))))))))