       (let [fclause (first clauses)
             rclauses (rest clauses)
             {:keys [clause parent]}
-            fclause]
+            fclause
+            mkerror (partial make-error
+                             present-packages
+                             found-packages
+                             absent-specs
+                             clause)]
         (if (empty? clause)
-          [:unsuccessful
-           {:problems
-            [{:term clause
-              :found-packages found-packages
-              :present-packages present-packages
-              :absent-specs absent-specs
-              :reason :empty-alternative-set}]}]
+          (mkerror :empty-alternative-set)
           (let [clause-result
                 (first-found
                   (fn try-alternative

                                           absent-specs
                                           id
                                           spec))]
                              {id pkgs}))
                          :problems
                          [
                           {:term clause
                            :found-packages found-packages
                            :present-packages present-packages
                            :absent-specs absent-specs
                            :reason :present-package-conflict
                            :alternative alternative
                            :package-id id}]}]
                        (= status :absent)
                        (resolve-deps
                          repo

                                    :reason :seek-package-logic-error
                                    :package-id id}]}]))
                            )))))
conj
successful?
;; Hoisting
(hoist (cull-alternatives
