        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]])

    tree))

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

(defmacro def-data-flow
  [name tree]

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