   (bind [self f]
     (-> (fn [s]
           (let [p        (mfn s)
-                value    (.fst p)
-                newstate (.snd p)]
+                value    (.-fst p)
+                newstate (.-snd p)]
             ((f value) newstate)))
         (state-t)))
 

  Object
  (equals [this other]
    (if (instance? Pair other)
      (and (= (.fst this) (.fst other))
           (= (.snd this) (.snd other)))
      false))

  (toString [this]


(defn left?
  [mv]
  (= (.-type mv) :left))

(defn right?
  [mv]
  (= (.-type mv) :right))

(defn from-either
  "Return inner value of either monad."
  [mv]
  (.-v mv))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Maybe
