   (>!! letters-in :z)
   (async/close! out)
   (<!! (async/into [] out))
+
+
+  (def mouse-position
+    (signals/input :mouse-position [0 0] #(...)))
+
+  (def events-input (chan))
+
   )
+
+

      (event-channel-fn [_] (event-channel-fn node)))))


;(defrecord Input
;  [init event-channel-fn topic])

;(defn async*
;  [id sig]
;  (let [s (sprout sig)
;        c-in (:channel s)
;        c-out (chan 1 (comp (filter change?)
;                            (map body)))]
;    (async/pipe c-in c-out)
;    (input* id (:value s))))
;
;(def async
;  [source-node]
;  (let [topic (gen-id)]
;    (reify
;      NodeProtocol
;      (node->signal [_ source-node->signal]
;        (async* topic (source-node->signal source-node)))
;      (sources [_] [source-node])
;      InputNodeProtocol
;      (event-topic [_] topic)
;      (event-channel-fn [_] ()))))

(defn lift-msgs
  [f & source-nodes]
  (reify

        (recur msg)))
    (->Signal v (async/mult c-out))))

(defprotocol NodeProtocol
  (node->signal [n source-node->signal])
  (sources [n]))
