Konrad,
Here's a shot at implementing a monad transformer for the state
monad. Any chance of getting it added to clojure.contrib.monads?
(defn state-t [m]
(monad [m-result (with-monad m
(fn [v]
(fn [s]
(m-result (list v s)))))
m-bind (with-monad m
(fn [stm f]
(fn [s]
(m-bind (stm s)
(fn [[v ss]]
((f v) ss))))))
m-zero (with-monad m
(when (not= ::undefined m-zero)
(fn [s]
m-zero)))
m-plus (with-monad m
(when (not= ::undefined m-zero)
(fn [& stms]
(fn [s] (apply m-plus (map #(% s) stms))))))
]))
I've also about finished with the first draft of a monad tutorial for
Clojure based on clojure.contrib.monads.
Jim
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---