 
 (defn left
   "A Left type constructor."
-  ([] (Left. nil))
-  ([v] (Left. v)))
+  ([] (->Left nil))
+  ([v] (->Left v)))
 
 (defn right
   "A Right type constructor."
-  ([] (Right. nil))
-  ([v] (Right. v)))
+  ([] (->Right nil))
+  ([v] (->Right v)))
 
 (defn left?
   "Return true if `v` is an instance

      (assert (either? s) (str "Context mismatch: " (p/-repr s)
                               " is not allowed to use with either context."))
      (if (right? s)
        (f (.-v ^Right s))
        s))

    p/MonadZero

    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]
