   (let [ctx (ctx/get-current af)]
     (reduce (partial p/fapply ctx) af avs)))
 
+
+;; TODO: review it, seems wrong and should be a macro?
 (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))))

(defn mappend
  [& svs]
  {:pre [(seq svs)]}

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