   (if (seq bindings)
     `(-> ~val
          ((:>>= ~m) (fn [~name]
-                       ~(m-steps m (vec bindings) body))))
+                      ~(m-steps m (vec bindings) body))))
     `(-> ~val
          ((:>>= ~m) (fn [~name]
-                       ((:return ~m) ~body))))))
+                      ((:return ~m) ~body))))))
 
 (defmacro do-m [m bindings body]
   (m-steps m bindings body))

                     b mb]
        (+ a b)))

(m-add 1 2)
(m-add 1 nil)
;;(add 1 nil)                                                 ;;CompilerException java.lang.NullPointerException

(def monad-maybe {:return (fn [v] v)
                  :>>=    (fn [mv f]
                            (when mv
                              (f mv)))})

