   proto/Monad
   (bind [self f]
     (into []
-          (mapcat f self)))
+          (apply concat (map 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]))


  proto/Monad
  (bind [self f]
    (apply concat (map f self))))

; TODO: test & document
(extend-type #+clj clojure.lang.PersistentVector
