aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib/monads/examples.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib/monads/examples.clj')
-rw-r--r--src/clojure/contrib/monads/examples.clj12
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]