     (mbind [_ mv f]
       (if (nothing? mv)
         mv
-        (f (from-maybe mv))))
+        (f (p/extract mv))))
 
     p/MonadZero
     (mzero [_]

    (fapply [m af av]
      (if (nothing? af)
        af
        (p/fmap m (from-maybe af) av)))

    p/Monad
    (mreturn [_ v]

               mv
               (fn [maybe-v]
                 (if (just? maybe-v)
                   (f (p/extract maybe-v))
                   (p/mreturn inner-monad (nothing))))))

    p/MonadZero
