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