28 lines
814 B
Racket
28 lines
814 B
Racket
#lang turnstile
|
|
|
|
(provide (for-syntax get-effect
|
|
effect-free?
|
|
pure?
|
|
all-pure?))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; Effect Checking
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; DesugaredSyntax EffectName -> (Syntaxof Effect ...)
|
|
(define-for-syntax (get-effect e- eff)
|
|
(or (syntax-property e- eff) #'()))
|
|
|
|
;; DesugaredSyntax EffectName -> Bool
|
|
(define-for-syntax (effect-free? e- eff)
|
|
(define prop (syntax-property e- eff))
|
|
(or (false? prop) (stx-null? prop)))
|
|
|
|
;; DesugaredSyntax -> Bool
|
|
(define-for-syntax (pure? e-)
|
|
(for/and ([key (in-list '(ep f s))])
|
|
(effect-free? e- key)))
|
|
|
|
;; (SyntaxOf DesugaredSyntax ...) -> Bool
|
|
(define-for-syntax (all-pure? es)
|
|
(stx-andmap pure? es)) |