is this a simple monad example?
- by zcaudate
This is my attempt to grok monadic functions after watching http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads.
h uses bind to compose together two arbitrary functions f and g. What is the unit operator in this case?
;; f :: int - [str]
;; g :: str = [keyword]
;; bind :: [str] - (str - [keyword]) - [keyword]
;; h :: int - [keyword]
(defn f [v]
(map str (range v)))
(defn g [s]
(map keyword (repeat 4 s)))
(defn bind [l f]
(flatten
(map f l)))
(f 8) ;; = (0 1 2 3 4 5 6 7)
(g "s") ;; = (:s :s :s :s)
(defn h [v]
(bind (f v) g))
(h 9)
;; = (:0 :0 :0 :0 :1 :1 :1 :1 :2 :2 :2 :2 :3 :3 :3 :3 :4 :4 :4 :4 :5 :5 :5 :5)