diff options
author | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-06 12:45:08 +0000 |
---|---|---|
committer | Konrad Hinsen <konrad.hinsen@laposte.net> | 2009-03-06 12:45:08 +0000 |
commit | 6037e78cb29b399004b37ef4be42fe0da68b935d (patch) | |
tree | 445ced833b4ae25c4d9b40d4cfcd14124f8a41c3 /src/clojure/contrib/monads.clj | |
parent | 245fc9ec4499219bfb66f3fe4789b884b418c7b2 (diff) |
monads: added set monad
Diffstat (limited to 'src/clojure/contrib/monads.clj')
-rw-r--r-- | src/clojure/contrib/monads.clj | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/clojure/contrib/monads.clj b/src/clojure/contrib/monads.clj index 3d746acf..01ee7784 100644 --- a/src/clojure/contrib/monads.clj +++ b/src/clojure/contrib/monads.clj @@ -1,7 +1,7 @@ ;; Monads in Clojure ;; by Konrad Hinsen -;; last updated March 3, 2009 +;; last updated March 6, 2009 ;; Copyright (c) Konrad Hinsen, 2009. All rights reserved. The use ;; and distribution terms for this software are covered by the Eclipse @@ -243,6 +243,19 @@ (apply concat mvs)) ]) +; Set monad +(defmonad set-m + "Monad describing multi-valued computations, like sequence-m, + but returning sets of results instead of sequences of results." + [m-result (fn m-result-set [v] + #{v}) + m-bind (fn m-bind-set [mv f] + (apply clojure.set/union (map f mv))) + m-zero #{} + m-plus (fn m-plus-set [& mvs] + (apply clojure.set/union mvs)) + ]) + ; State monad (defmonad state-m "Monad describing stateful computations. The monadic values have the |