                :string)}))
 
 (def string
-  (gen/fmap string->item-string
-            (gen/not-empty gen/string-alpha-numeric)))
+  (->> (gen/not-empty gen/string-alpha-numeric)
+       (gen/fmap string->item-string)))
 
 (defn use-alias [aliases]
   (gen/elements aliases))

  (let [alias-gen (if (seq prev-aliases)
                    (gen/elements prev-aliases)
                    string) ;; avoid throwing when empty
        alias-name (gen/such-that #(and (seq %)
                                        (Character/isLetter (first %))
                                        (not-any? (fn [e] (= % (:value e)))
                                                  prev-aliases))
                                  (gen/resize 20 gen/string-alpha-numeric))
        expr (expression alias-gen)]
    (->> (gen/tuple alias-name expr)
         (gen/fmap (fn [[alias-name expr]]

        alias-gen (if (seq alias-items)
                    (gen/elements alias-items)
                    string) ;; avoid throwing when empty
        rule-name-gen (gen/such-that
                       #(and (seq %)
                             (Character/isLetter (first %))
                             (not (contains? alias-names %))
                             (not (contains? #{"or" "cat" "star" "alias" "def"
                                               "plus" "opt"} %)))
                       (gen/resize 20 gen/string-alpha-numeric))]
    (->> (gen/map rule-name-gen (expression alias-gen))
         (gen/not-empty)
         (gen/fmap (fn [m] ;; tag on priority on rules
