   "Create a coach from a predicate and a message. Falter if message is nil."
   [predicate message]
   (if (nil? message)
-    (falter 'message ["must not be nil"])
+    (falter "message" ["must not be nil"])
     (as-coach
       (fn [value]
         (sequence (when-not ((wrap-try predicate) value)


(defn falter
  "Throw an AssertionError when there are bad manners."
  ([prefix-sym bad-manners]
   (let [full-prefix (when prefix-sym (str "Invalid " prefix-sym ": "))]
     (when-not (empty? bad-manners)
       (throw (AssertionError. (str full-prefix (s/join ", " bad-manners)))))))
  ([bad-manners] (falter nil bad-manners)))

  (applyTo [this args] (apply f args)))

(defn as-coach
  "Create a coach from the composition of the given functions."
  [& coaching-fns]
  (Coach. (apply comp coaching-fns)))

(defn as-memo-coach
  "Like as-coach, but memoize before wrapping with Coach."
  [& coaching-fns]
  (Coach. (memoize (apply comp coaching-fns))))

