 
 
 (defn register-type
-  "Takes an Interpreter record, and a PushType record, and adds the
-  PushType to the :types collection in the Interpeter; adds the
-  type's :name as a new stack (if not already present); appends the 
-  type's :recognizer to the :router vector; adds
-  the type's internally defined instructions to the Interpreter's
-  registry automatically."
+  "Takes an Interpreter record, and a PushType record, and adds the PushType to the :types collection in the Interpeter; adds the type's :name as a new stack (if not already present); appends the type's :recognizer to the :router vector; adds the type's internally defined instructions to the Interpreter's registry automatically."
   [interpreter type]
   (let [old-types (:types interpreter)
         old-stacks (:stacks interpreter)



(defn register-types
  "Takes an Interpreter record, and a list of PushType records. Calls
  `register-type` on each of the types in turn."
  [interpreter types]
  (reduce #(register-type %1 %2) interpreter types))


(defn register-modules
  "Takes an Interpreter record, and a list of modules. Calls
  `register-module` on each of those in turn."
  [interpreter modules]
  (reduce #(register-module %1 %2) interpreter modules))


(defn register-input
  "Takes an Interpreter record, a keyword and any item, and adds the
  item as a value stored under the keyword in the :inputs hashmap."
  ([interpreter value]
    (let [next-index (inc (count (:inputs interpreter)))
          next-input (keyword (str "input!" next-index))]



(defn register-instruction
  "Takes an Interpreter and an Instruction, and attempts to add the Instruction to the :instructions map of the Interpreter, keyed by its `:token`."
  [interpreter instruction]
  (let [token (:token instruction)
        registry (:instructions interpreter)]
