     form))
 
 (defmethod validate "formula" [[_formula_ & args :as form]]
-  (let [[_docstring? opt-map bindings _body] (deconstruct-formula-args args)
+  (let [[docstring? opt-map bindings body] (deconstruct-formula-args args)
         invalid-keys (remove (partial = :num-trials) (keys opt-map))]
     (cond (not (leaves-contain-arrow? (check-part-of args)))
           (simple-report-validation-error form "There is no expection in your formula form:")

  how many facts are generated per formula."
  {:arglists '([docstring? opts-map? bindings & body])}
  [& args]
  (when-valid &form
    (let [[docstring? opts bindings body] (deconstruct-formula-args args)
          fact (formula-fact docstring? body)
          conclusion-signal `(midje.sweet/fact
                               :always-pass midje.sweet/=> :always-pass 
                               :formula :formula-conclude )]

      `(try
         (loop [cnt-down# (or (:num-trials ~opts) midje.ideas.formulas/*num-trials*)]
           (when (pos? cnt-down#)
             (let [snd-bindings# ~(vec (take-nth 2 (rest bindings)))
                   ~(vec (take-nth 2 bindings)) snd-bindings#]
               (if ~fact
                 (recur (dec cnt-down#))
                 (shrink-failure-case ~docstring? 
                                      ~(vec (take-nth 2 bindings)) 
                                      snd-bindings# 
                                      ~body)))))
         (finally
           ~conclusion-signal)))))

(def future-formula-variant-names (map #(str % "formula") future-prefixes))


  (let [[docstring? more-args] (pop-docstring args)
        [opts bindings body] (if (map? (first more-args))
                               [(first more-args) (second more-args) (rest (rest more-args))]
                               [{}                (first more-args)  (rest more-args)])]
    [docstring? opts bindings body]))

(defmacro formula 
