   branch."
   [error]
   [nil error])
+
+(defn succeeded?
+  "Determines if the two-track-input contains a success"
+  [two-track-input]
+  (-> two-track-input first nil? not))
+
+(defn failed?
+  "Determines if the two-track-input contains a failure"
+  [two-track-input]
+  (-> two-track-input succeeded? not))
+
+(defn get-success
+  "Gets the success from the two-track-input.  Throws a
+  NoSuchElementException if one doesn't exist."
+  [two-track-input]
+  (or (first two-track-input) (throw (NoSuchElementException. "No success available"))))
+
+(defn get-failure
+  "Gets the failure from the two-track-input.  Throws a
+  NoSuchElementException if one doesn't exist."
+  [two-track-input]
+  (or (second two-track-input) (throw (NoSuchElementException. "No failure available"))))
+
+(defmulti execute (fn [two-track-input _] (succeeded? two-track-input)))
+(defmethod execute true [two-track-input switch-fn]
+  (-> two-track-input get-success switch-fn))
+(defmethod execute :default [two-track-input _] two-track-input)
 
 (defn bind
   "An adapter that takes a swtich function and creates a new function

  This Source Code Form is subject to the terms of the Mozilla Public
  License, v. 2.0. If a copy of the MPL was not distributed with this
  file, You can obtain one at http://mozilla.org/MPL/2.0/."
  (:refer-clojure :rename {map core-map}))

(defmulti execute (fn [[value] _] value))
(defmethod execute nil [two-track-input _] two-track-input)
(defmethod execute :default [[value] switch-fn] (switch-fn value))

(defn succeed
  "Creates a two-track result by placing the value on the success

  otherwise."
  (fn [one-track-input]
    (let [results ((apply juxt switch-fns) one-track-input)
          failures (filter failed? results)]
      (if (empty? failures)
        (succeed (apply merge-success (core-map get-success results)))
        (fail (apply merge-failure (core-map get-failure failures)))))))

