    (p/mzero (ctx/get-current)))
   ([ctx]
    (p/mzero ctx)))
+
+;; TODO: improve performance
 
 (defn mplus
   [& mvs]

  (let [ctx (ctx/get-current af)]
    (reduce (partial p/fapply ctx) af avs)))

(defn when
  "Given an expression and a monadic value,
  if the expression is logical true, return the monadic value.

   (let [ctx (ctx/get-current ctx-or-val)]
     (p/mempty ctx))))


;; TODO: improve performance
(defn mappend
  [& svs]
  {:pre [(seq svs)]}
