RosettaCodeData/Task/Monads-List-monad/Clojure/monads-list-monad.clj
2023-07-01 13:44:08 -04:00

10 lines
388 B
Clojure

(defn bind [coll f] (apply vector (mapcat f coll)))
(defn unit [val] (vector val))
(defn doubler [n] [(* 2 n)]) ; takes a number and returns a List number
(def vecstr (comp vector str)) ; takes a number and returns a List string
(bind (bind (vector 3 4 5) doubler) vecstr) ; evaluates to ["6" "8" "10"]
(-> [3 4 5]
(bind doubler)
(bind vecstr)) ; also evaluates to ["6" "8" "10"]