   "Lifts a function with the given fixed number of arguments to a
   monadic context.
 
-    (require '[cats.monad.maybe :as maybe])
-    (require '[cats.core :as m])
-
-    (def monad+ (m/lift-m 2 +))
-
-    (monad+ (maybe/just 1) (maybe/just 2))
-    ;=> <Just [3]>
-
-    (monad+ (maybe/just 1) (maybe/nothing))
-    ;=> <Nothing>
-
-    (monad+ [0 2 4] [1 2])
-    ;=> [1 2 3 4 5 6]
+      (require '[cats.monad.maybe :as maybe])
+      (require '[cats.core :as m])
+
+      (def monad+ (m/lift-m 2 +))
+
+      (monad+ (maybe/just 1) (maybe/just 2))
+      ;=> <Just [3]>
+
+      (monad+ (maybe/just 1) (maybe/nothing))
+      ;=> <Nothing>
+
+      (monad+ [0 2 4] [1 2])
+      ;=> [1 2 3 4 5 6]
   "
   [n f]
   (let [val-syms (repeatedly n gensym)

  "Given a non-empty collection of monadic values, collect
  their values in a vector returned in the monadic context.

    (require '[cats.monad.maybe :as maybe])
    (require '[cats.core :as m])

    (m/sequence [(maybe/just 2) (maybe/just 3)])
    ;=> <Just [[2, 3]]>

    (m/sequence [(maybe/nothing) (maybe/just 3)])
    ;=> <Nothing>
  "
  [mvs]
  {:pre [(not-empty mvs)]}


  Otherwise, returns the instance unchanged.

      (require '[cats.monad.moaybe :as maybe])
      (require '[cats.core :as m])

      (m/filter (partial < 2) (maybe/just 3))
      ;=> <Just [3]>

      (m/filter (partial < 4) (maybe/just 3))
      ;=> <Nothing>
  "
  [p mv]
  (with-monad (get-current-context mv)
