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

    tree))

(defprotocol IEvalExpr
  (eval-expr [this] "Evaluate the expression"))

(defmacro def-data-flow
  [name tree]

       IEvalExpr
       ;; (eval-expr [~this] (eval-expr-in-env ~tree ~this))
       (eval-expr [~this] ~(compile-eval-expr tree this))
       (expr->data [_] (quote ~tree))
       )))

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