    (let [ctx (ctx/get-current ctx-or-val)]
      (p/mempty ctx))))
 
+
+;; TODO: improve performance
 (defn mappend
   [& svs]
   {:pre [(seq svs)]}

  (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.

  ([ctx b mv]
   (if b mv (return ctx nil))))

;; TODO: review it, seems wrong and should be a macro?
(defn unless
  "Given an expression and a monadic value,
  if the expression is not logical true, return the monadic value.
