     (str "#define " (:name m))))
 
 (defn include
-  ([file system? & dependencies]
-     {:type :include
-      :file file
-      :system system?
-      :dependencies dependencies})
-  ([file system?]
-     (include file system? nil))
-  ([file]
-     (include file false nil)))
+  [file system? & dependencies]
+  {:type :include
+   :file file
+   :system system?
+   :dependencies dependencies})
 
 (defemit :include [m]
   (if (:system m)

    (str "#include \"" (:file m) "\"")))

(defn ifdef
  ([cond then else & dependencies]
     {:type :ifdef
      :cond cond
      :then then
      :else else
      :dependencies dependencies})
  ([cond then else]
     (ifdef cond then else nil))
  ([cond then]
     (ifdef cond then nil nil)))

(defemit :ifdef [m]
  (if (:else m)

  (reduce str (map #(emit-code %) s)))

(defn define
  [name value & dependencies]
  {:type :define
   :name name
   :value value
   :dependencies dependencies})

(defemit :define [m]
  (if (:value m)
