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

    (mbind [_ mv f]
      (if (nothing? mv)
        mv
        (f (from-maybe mv))))

    p/MonadZero
    (mzero [_]

    (fmap [_ f mv]
      (if (nothing? mv)
        mv
        (just (f (p/extract mv)))))

    p/Applicative
    (pure [_ v]
