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

16 lines
434 B
Racket

(module pr10470 typed-scheme
(define-type-alias (Memo alpha) (U (Option alpha) (-> (Option alpha))))
(define-struct: table ([val : (Memo Number)]) #:mutable)
(: f (table -> (Option Number)))
(define (f tab)
(let ([proc-or-num (table-val tab)])
(cond
[(procedure? proc-or-num)
(let ([result (proc-or-num)])
(set-table-val! tab result)
result)]
[else proc-or-num]))))