     (fapply [m af av]
       (if (nothing? af)
         af
-        (p/fmap m (from-maybe af) av)))
+        (p/fmap m (p/extract af) av)))
 
     p/Monad
     (mreturn [_ v]

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

    p/MonadZero

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

    p/Applicative
    (pure [_ v]
