 
   proto/Monad
   (bind [self f]
-    (mapcat f self)))
+    (apply concat (map f self))))
 
 ; TODO: test & document
 (extend-type #+clj clojure.lang.PersistentVector

  proto/Monad
  (bind [self f]
    (into []
          (mapcat f self)))

  proto/MonadZero
  (mzero [_] [])

(extend-type #+clj  clojure.lang.LazySeq
             #+cljs cljs.core.LazySeq
  proto/Functor
  (fmap [self f] (map f self))

  proto/Applicative
  (pure [_ v] (lazy-seq [v]))
