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