Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. (ns forms.dataflow
  2. (:require [com.stuartsierra.dependency :as dep]
  3. [medley.core :as med]
  4. [rum.core :as rum]))
  5.  
  6. (def base (atom 0))
  7.  
  8. (def reactive-spec
  9. {:base [[] base]
  10. :inc [[:base] (fn [base] (inc base))]
  11. :as-map [[:base :inc] (fn [base inc] {:base base :after-inc inc})]
  12. :sum [[:as-map] (fn [as-map] (+ (:base as-map) (:after-inc as-map)))]})
  13.  
  14. (defn depend'
  15. [graph node deps]
  16. (reduce (fn [graph dep]
  17. (dep/depend graph node dep))
  18. graph
  19. deps))
  20.  
  21. (defn spec->graph [spec]
  22. (reduce-kv (fn [graph id [dependencies]]
  23. (depend' graph id dependencies))
  24. (dep/graph)
  25. spec))
  26.  
  27. (defn build
  28. [spec]
  29. (let [graph (spec->graph spec)]
  30. (reduce (fn [m k]
  31. (let [[direct-deps derive] (-> spec k)]
  32. (prn direct-deps)
  33. (if (fn? derive)
  34. (assoc m k (rum/derived-atom (map m direct-deps) k derive))
  35. (assoc m k derive))))
  36. {}
  37. (dep/topo-sort graph))))
  38.  
  39. (comment
  40.  
  41. (build x)
  42.  
  43. (def reactions
  44. (build x))
  45.  
  46. (swap! base inc)
  47.  
  48. (med/map-vals deref reactions)
  49.  
  50.  
  51.  
  52. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement