    ""))
 
 (defn get-string [word]
-  (log/debug (str "get-string: " word))
+  (log/debug (if (map? word) (str "get-string: " (strip-refs word))))
   (cond
    (ref? word)
    (get-string @word)

                  :b {:a (get-in word '(:b :a :past))
                      :b (get-in word '(:b :b))}})
   (and
    (get-in word '(:a))
    (get-in word '(:b)))
   (join " "
         (list (get-string (get-in word '(:a)))
               (get-string (get-in word '(:b)))))

   ;; TODO: this seems wrong: how could :infl == :english?
   (and (= :english (get-in word '(:infl)))

                                   merge-fn (:merge-fn path-and-merge-fn)]
                               ;; a lexeme-kv is a pair of a key and value. The key is a string (the word's surface form)
                               ;; and the value is a list of lexemes for that string.
                               (log/debug (str "'" (first lexeme-kv) "' looking at path: " path))
                               (mapcat (fn [lexeme]
                                         ;; this is where a unify/dissoc that supported
                                         ;; non-maps like :top and :fail, would be useful:
