                    (at-most 4))})
 
 (def LandDeck
-  {:type (is? :land)
+  {:type (s/eq :land)
    :cards (s/both [(s/either BasicLandDeckCard
                              NonBasicLandDeckCard)]
                   (total-amount-at-least 30))})

                   (at-most 3))})

(def SpellDeck
  {:type (is? :spell)
   :cards (s/both [SpellDeckCard]
                  (total-amount-at-least 40))})


  #+clj (:require [schema.macros :as sm])
  #+cljs (:require-macros [schema.macros :as sm]))

(defn at-most [amount] (s/pred (partial >= amount) 'at-most))

(defn total-amount-at-least [amount]
  (s/pred
   (fn [deck-cards]
     (->> deck-cards
          (map #(or (:amount %) 1))
          (apply +)
          (<= amount)))
   'total-amount-at-least))

(defn one-or-many [schema]
  (s/if #(set? %) #{schema} schema))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Cards
