blob: 5314ea7a435fd6f248d9cb9381a4b6180babbcb7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
(ns unheard.theory
(:require [missionary.core :as m]
[unheard.time-object :refer
[time-object lift phrase timeline point-query]]
[unheard.util.missionary :refer [reconcile-merge]]))
(defn note
[>clock start duration >value]
(lift (time-object start
duration
(m/stream
(m/ap
(let [[c v] (m/?> (m/relieve
(m/latest vector >clock >value)))]
v))))))
;; BUG: 2d7f861
(defn read
[>clock timeline]
(m/relieve
(m/reductions {} nil
(m/eduction (map vals)
(m/reductions
(fn [acc {:keys [id state value]}]
(if (= :up state)
(assoc acc id value)
(dissoc acc id)))
{}
(reconcile-merge (point-query timeline >clock)))))))
(comment
(def c (atom 0))
(def >c (m/signal (m/watch c)))
(def v (atom 0))
(def >v (m/signal (m/watch v)))
(def song (phrase (note >c 4 8 >v) (note >c 6 6 >v)))
(def t (timeline song))
(def cancel ((m/reduce prn nil (read >c t)) prn prn))
(cancel)
(swap! c dec)
(swap! c inc)
(swap! v inc)
(swap! v dec))
|