imugi/engine/guards.scm

27 lines
747 B
Scheme

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