     tree))
 
 (defprotocol IEvalExpr
-  (eval-expr [this] "Evaluate the expression"))
+  (eval-expr [this] "Evaluate the expression")
+  (expr->data [this] "The form used to create it"))
 
 (defmacro def-data-flow
   [name tree]

       IEvalExpr
       ;; (eval-expr [~this] (eval-expr-in-env ~tree ~this))
       (eval-expr [~this] ~(compile-eval-expr tree this))
       )))

(def-data-flow Expr [+ :a [* :b :c]])

(defn test-data-flow
  []
  (let [e (map->Expr {:a 1 :b 2 :c 3})]
    (println (eval-expr e))
    (println (expr->data e))
    ))
