diff options
Diffstat (limited to 'src/clojure/contrib/monads/examples.clj')
-rw-r--r-- | src/clojure/contrib/monads/examples.clj | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/clojure/contrib/monads/examples.clj b/src/clojure/contrib/monads/examples.clj index 850fc19d..a216cb39 100644 --- a/src/clojure/contrib/monads/examples.clj +++ b/src/clojure/contrib/monads/examples.clj @@ -43,12 +43,22 @@ y (range 3)] (+ x y))) +; Conditions are written with :when, as in Clojure's for form: (domonad sequence-m [x (range 5) y (range (+ 1 x)) - :when (= (+ x y) 2)] + :when (= (+ x y) 2)] (list x y)) +; :let is also supported like in for: +(domonad sequence-m + [x (range 5) + y (range (+ 1 x)) + :let [sum (+ x y) + diff (- x y)] + :when (= sum 2)] + (list diff)) + ; An example of a sequence function defined in terms of a lift operation. (with-monad sequence-m (defn pairs [xs] |