(module (engine guards) () (import scheme (chicken base) (chicken module) (srfi 99)) ;; Utility function for guarding parameter values (export guarded-parameter) (define (guarded-parameter default predicate) (make-parameter default (lambda (val) (if (predicate val) val default)))) ;; Guarded record functions (export guarded-mutator) ;; Shorthand for defining a guarded mutator for a record field (define (guarded-mutator record-type field predicate) (lambda (rec val) (assert (record-type rec)) (assert (predicate val)) ((rtd-mutator (record-rtd rec) field) rec val))) ;; TODO: define a similar function here for record constructor ;; TODO: define a similar function here for binary operations on records )