private/effect-structs.ss
(module effect-structs mzscheme
  (require (lib "unit.ss") (lib "struct.ss") "signatures.ss"
           "defstruct-unit.ss" )
  (provide (all-defined))
  
  (defstructs/sig/unit effect-structs^ effect-structs@
    
    (type-printer^)
    
    ;; necessary to fool the guard on custom-write, since it starts off undefined
    (define (print-effect* a b c) (print-effect a b c))
    
    (define-struct/properties effect () 
      ([prop:custom-write print-effect*])
      #f)
    
    (define-struct/properties (true-effect effect) () () #f)
    (define-struct/properties (false-effect effect) () () #f)
    (define-struct/properties (var-true-effect effect) (v) () #f)
    (define-struct/properties (var-false-effect effect) (v) () #f)
    
    ;; markers for how to handle a particular type
    
    
    (define-struct/properties (restrict-effect effect) (t v) () #f)
    (define-struct/properties (remove-effect effect) (t v) () #f)

    (define-struct/properties (latent-restrict-effect effect) (t) () #f)
    (define-struct/properties (latent-remove-effect effect) (t) () #f)
    (define-struct/properties (latent-var-true-effect effect) () () #f)
    (define-struct/properties (latent-var-false-effect effect) () () #f)
    
    ;; could also have latent true/false effects, but seems pointless

    )
  
  )