pure-safe.rkt (1241B)
1 #lang typed/racket 2 3 (provide promise/pure/maybe-stateful? 4 promise/pure/stateless? 5 delay/pure/stateful 6 delay/pure/stateless) 7 8 (require typed/racket/unsafe 9 "pure-function.rkt" 10 racket/private/promise 11 (for-syntax version-case 12 racket/base 13 syntax/parse 14 phc-toolkit/untyped) 15 (for-meta 2 racket/base)) 16 17 (unsafe-require/typed 18 "pure-unsafe.rkt" 19 [make-promise/pure/stateful (∀ (a) (→ (→ a) (Promise a)))] 20 [make-promise/pure/stateless (∀ (a) (→ (→ a) (Promise a)))]) 21 22 (define-for-syntax (stx-e x) 23 (if (syntax? x) (syntax-e x) x)) 24 25 (define-syntax (delay/pure/stateless/unsafe stx) 26 (version-case 27 [(version< (version) "7.4") 28 (make-delayer stx #'make-promise/pure/stateless '())] 29 [else 30 (delayer (#'make-promise/pure/stateless '()) stx)])) 31 32 (define-syntax delay/pure/stateful 33 (syntax-parser 34 [(_ e) 35 (syntax/top-loc this-syntax 36 (make-promise/pure/stateful 37 (pure-thunk/stateful (λ () e))))])) 38 39 (define-syntax delay/pure/stateless 40 (syntax-parser 41 [(_ e) 42 (syntax/top-loc this-syntax 43 (make-promise/pure/stateless 44 (pure-thunk/stateless (λ () e))))]))