blob: 46c0bf99779179ee4902407b07fd91ed35a016c1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
;;; Commentary:
;; This file should define all global configurable variables which
;; doesn't belong anywhere else. The config module should then import
;; this module, and set all configs as needed. The config module
;; should also be able to set configs gotten from other parts.
;;; Code:
(define-module (util config)
:export (register-config!)
)
(define-public (ensure pred?)
(lambda (v)
(unless (pred? v)
(error (format #f "Value [~s] doesn't satisfy condition ~a"
v (or (procedure-name pred?) ""))))
v))
(define-macro (register-config! name default-value valid-value?)
`(save-module-excursion
(lambda ()
(define mod (resolve-module '(util config all)))
(set-current-module mod)
(module-define! mod (quote ,name)
(make-parameter ,default-value
,valid-value?))
(export ,name))
))
|