     (fmap [_ f mv]
       (if (nothing? mv)
         mv
-        (just (f (from-maybe mv)))))
+        (just (f (p/extract mv)))))
 
     p/Applicative
     (pure [_ v]

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

    p/MonadZero
    (mzero [_]

    (fapply [m af av]
      (if (nothing? af)
        af
        (p/fmap m (p/extract af) av)))

    p/Monad
    (mreturn [_ v]
