   (->> (split s #"\n|\t|\n| ")
        (remove empty?)
        (reduce
-        (fn [{:keys [len res]} word]
+        (fn [{:keys [len res]} ^String word]
           (if (< (+ len (.length word)) width)
             {:len (+ len (.length word) 1) :res (conj res " " word)}
             {:len (.length word) :res (conj res "\n" word)}))

  (.replaceAll (.toString s) "[ \t\n\r]+" " "))

(defn- levenshtein-distance
  [s1 s2]
  (let [subsolutions (atom {})
        subsolution (fn [i j]
                      (if (or (zero? i) (zero? j))

  "Return s if s contains any of the needles."
  ([^CharSequence s needles]
   (let [s (.toString s)
         needles (map #(.toString ^String %) needles)]
     (some (partial case-sensitive-contains s) needles)))
  ([^CharSequence s needles ignore-case]
   (let [s (.toString s)
         needles (map #(.toString ^String %) needles)]
     (if ignore-case
       (some (partial case-insensitive-contains s) needles)
       (contains-any? s needles)))))
