 
     (-fapply [m af av]
       (if (right? af)
-        (p/-fmap m (.-v ^Right af) av)
+        (p/-fmap m (p/-extract ^Right af) av)
         af))
 
     p/Monad


(defn left
  "A Left type constructor."
  ([] (Left. nil))
  ([v] (Left. v)))

(defn right
  "A Right type constructor."
  ([] (Right. nil))
  ([v] (Right. v)))

(defn left?
  "Return true if `v` is an instance

    p/Functor
    (-fmap [_ f s]
      (if (right? s)
        (right (f (p/-extract ^Right s)))
        s))

    p/Bifunctor
    (-bimap [_ f g s]
      (if (left? s)
        (left  (f (p/-extract ^Left s)))
        (right (g (p/-extract ^Right s)))))

    p/Applicative
    (-pure [_ v]
