 (def concurrent false)
 (declare path-to-map)
 (declare add-complement)
-(declare add-all-complements-to-bolts)
-(declare add-complements-to-bolts)
 
 (declare lightning-bolt)
 (declare generate-all)

                )

              ;; else, return-val was not empty.
              (do (log/debug (str "add-complement after adding complement: "
                                  (morph (first return-val)) ",.."))
                  return-val)))))

      ;; path doesn't exist in bolt: simply return the bolt unmodified.
      (do
        (list bolt)))))

(defn add-complements-to-bolts [bolts path spec grammar lexicon cache morph]
  (if (not (empty? bolts))
    (lazy-cat (if (or true (not (fail? (first bolts)))) ;; experimenting with using (or true ..) to disable this fail? check.
                (add-complement (first bolts) path spec grammar lexicon cache morph))
              (add-complements-to-bolts (rest bolts) path spec grammar lexicon cache morph))))

(defn path-to-map [path val]
  (let [feat (first path)]

          (lazy-cat lexical phrasal)
          (lazy-cat phrasal lexical))))))

(defn add-complement [bolt path spec grammar lexicon cache morph & [depth]]
  (let [input-spec spec
        from-bolt bolt ;; so we can show what (add-complement) did to the input bolt, for logging.
        bolt-spec (get-in bolt path :no-path)
        depth (if depth depth 0)
        spec (unifyc spec bolt-spec)]
    (log/debug (str "add-complement at path: " path " to bolt with bolt:["
                    (if (map? bolt) (get-in bolt [:rule]))
