   "Return true in case of `v` is instance
   of the Validation applicative."
   [v]
-  (if (satisfies? proto/Context v)
-    (identical? (proto/get-context v) validation-applicative)
+  (if (satisfies? p/Context v)
+    (identical? (p/get-context v) validation-applicative)
     false))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(def ^{:no-doc true}
  validation-applicative
  (reify
    proto/Semigroup
    (mappend [_ sv sv']
      (cond
        (and (fail? sv) (fail? sv')) (fail (m/mappend (m/extract sv)

         (with-out-str (print [v])))])

  #?@(:cljs
      [cljs.core/IEquiv
       (-equiv [_ other]
         (if (instance? Ok other)
           (= v (.-v other))
           false))]))

(deftype Fail [v]
  p/Context
  (get-context [_] validation-applicative)

  p/Extract
  (extract [_] v)

  #?(:clj clojure.lang.IDeref
