   (run-sequence (:content node) env))
 
 (defmethod interpret :expression [node env]
-  (interpret (first (:content node)) env))
+  (interpret (extract node [:content 0]) env))
 
 (defmethod interpret :value-assignment [node env]
   (let [assignee (extract node [:content 0])

      (throw (Exception. (str "I do not know what a " type-identifier " is."))))))

(defmethod interpret :invocation [node env]
  (def content (vec (:content node)))
  (def function (lookup (interpret (first content) env) env))
  (def param (interpret (nth content 1) env))
  (let [return-val (function env param)] ;; call fn
    (nreturn (:ctx env) return-val)))

(defmethod interpret :value [node env]
  (if (= :identifier (:tag (first-content node)))
    (lookup (first-content (first-content node)) env) ;; sub is identifier - lookup+return
    (interpret (first-content node) env)))

(defmethod interpret :identifier [node _]
  (first-content node))

(defmethod interpret :assignee [node _]
  (first-content node))

(defmethod interpret :integer [node _]
  (first-content node))

(defmethod interpret :string [node _]
  (str/replace (first-content node) "'" ""))

(defmulti assign (fn [_ assignee-node _] (extract assignee-node [:content 0 :tag])))



(defn lookup [identifier env]
  (get (:ctx env) identifier))

(defn extract [ast route]
  (if-let [nxt (first route)]
