                replace-patterns)))
 
 (defn get-lex2 [exp]
-  (mapcat #(let [from (first %)
-                 to (second %)
-                 unify-with (nth % 2)
-                 lex (string/replace exp from to)]
-             (map (fn [entry]
-                    (unifyc unify-with entry))
-                  (lookup lex)))
-          replace-patterns))
-
-
+  (filter (fn [result] (not (= :fail result)))
+          (mapcat #(let [from (first %)
+                         to (second %)
+                         unify-with (nth % 2)
+                         lex (string/replace exp from to)]
+                     (map (fn [entry]
+                            (unifyc unify-with entry))
+                          (lookup lex)))
+                  replace-patterns)))

  (:require [babel.engine :as engine]
            [babel.forest :as forest]
            [babel.francais.grammar :refer [small medium]]
            [babel.francais.morphology :refer [analyze fo replace-patterns]]
            [babel.francais.workbook :refer [generate parse]]
            [babel.over :as over]
            [clojure.string :as string]
            #?(:clj [clojure.test :refer [deftest is]])
            #?(:cljs [cljs.test :refer-macros [deftest is]])

;; i.e. if input is 'parle', return
;; list of lexemes; for each, [:synsem :agr :person] will be
;; 1st, 2nd, or 3rd, and for all, number will be singular.

(defn over
  ([arg1]
