diff --git a/src/nodely/engine/applicative.clj b/src/nodely/engine/applicative.clj index 0c18820..0aafc47 100644 --- a/src/nodely/engine/applicative.clj +++ b/src/nodely/engine/applicative.clj @@ -90,6 +90,13 @@ (app/fmap (partial async/put! chan) contextual-v) chan)) +(defn schedule + "schedule key k to be evaluated within env, returns lazy environment" + [env k opts] + (let [lazy-env (lazy-env/lazy-env env eval-in-context opts) + _ (get lazy-env k)] + lazy-env)) + (defn eval [env k opts] (let [lazy-env (lazy-env/lazy-env env eval-in-context opts)] @@ -97,4 +104,4 @@ (merge env (reduce (fn [acc [k v]] (assoc acc k (protocols/-extract v))) {} - (lazy-env/scheduled-nodes lazy-env))))) \ No newline at end of file + (lazy-env/scheduled-nodes lazy-env))))) diff --git a/test/nodely/engine/applicative_test.clj b/test/nodely/engine/applicative_test.clj index b308299..7339d53 100644 --- a/test/nodely/engine/applicative_test.clj +++ b/test/nodely/engine/applicative_test.clj @@ -289,3 +289,9 @@ promesa/context java.util.concurrent.CompletableFuture core-async/context clojure.core.async.impl.channels.ManyToManyChannel synchronous/context nodely.engine.applicative.synchronous.Box)) + +(deftest schedule + (let [lazy-env (applicative/schedule {:a (data/value 1)} :a {::applicative/context core-async/context})] + (is (= nodely.engine.lazy_env.LazySchedulingEnvironment (type lazy-env))) + (is (= (data/value 1) (async/