27 lines
747 B
Scheme
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
|
|
)
|