               ]
                 (println "  new-guess" new-guess 
                   "  guessed-chars (" (count guessed-chars) ")" guessed-chars)
-                (when (some nil? new-clue)
+                (when (some #(= \- %) new-clue)
                   (recur  (conj guessed-chars new-guess)  new-clue ) )
               )
             )


    ; Test if keep word
    (assert      (keep-word? "abcd" "abcd"             #{}            )  )
    (assert      (keep-word? "abcd" [\a  nil nil nil]  #{}            )  )
    (assert      (keep-word? "abcd" [\a  \b  nil nil]  #{}            )  )
    (assert      (keep-word? "abcd" [nil nil nil nil]  #{}            )  )
    (assert      (keep-word? "abcd" [\a  \b  nil nil]   guessed-chars )  )
    (assert (not (keep-word? "abcd" [\a  nil nil nil]   guessed-chars ) ))

  )
  (let [tst-words       [ "abcd" "xbcd" "xxcd" "xxxd" ] 
        words-map       (group-by count tst-words)
        word-list       (words-map 4)
        clue            [ nil \b  nil nil ]
        keep-words      (filter #(keep-word? % clue #{} ) word-list)
  ]
    (assert (= words-map   {4 ["abcd" "xbcd" "xxcd" "xxxd"]} ))

  "cat" "car" "can" "cob" "con" "cop" "cup" 
  "work" "love" "hate" "jobs" "able" "ball" ] )

(defn make-clue
  "Generate a clue given the target word and a vec of guessed letters. The clue is a
  vector the length of the target word consisting of either letters (for correctly guessed
  letters) or nil (for incorrect guesses)."
  [tgt-word guessed-chars]
  (vec (for [ letter tgt-word ] (get guessed-chars letter \- ))) )

(defn complement-char-class
  "Generate the regex for the complement of a set of characters."
