aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--control/monad/state.scm7
1 files changed, 6 insertions, 1 deletions
diff --git a/control/monad/state.scm b/control/monad/state.scm
index 72a3041..603e387 100644
--- a/control/monad/state.scm
+++ b/control/monad/state.scm
@@ -2,8 +2,8 @@
#:use-module (oop goops)
#:use-module (ice-9 match)
#:use-module (control monad)
- #:export (return-state run-state get put)
#:re-export (>>= >>))
+ #:export (return-state run-state get put modify))
;; Alternative implementation of get.
@@ -66,6 +66,11 @@
"Sets st to v."
(list '() v))
+(define-stateful ((modify proc) st-list)
+ (match st-list
+ ((r s)
+ (list '() (proc s)))))
+
(define-method (run-state (st <state>) init)
"Exec state with init as starting state value and st."
((proc st) (list init init)))