www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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))))]))