type ('b, 'a) tA node in a dynamic dataflow graph that receives values of type 'b and * produces values of type 'a.
type cannot_receiveAn uninhabited type used in the definition of create_source and
* from_pipe. This is the type of values that these nodes receive, thus they
* cannot receive any values.
val create : 'a ‑> ('b list ‑> 'a) ‑> ('b, 'a) tcreate init f creates an isolated node, initialized to hold init.
* Use the attach function to connect the node to consumers and producers.
* When any producer produces a value (of type 'b), the function f is
* applied to latest values of each produced to calculate the new value of
* this node. The new value is sent to all the consumers of this node.
val create_source : 'a ‑> (cannot_receive, 'a) tcreate_source init creates an isolated node initialized to hold init.
* You must not create an edge to this node--it will signal an error if it
* receive a value. But, you can update the value at the node using push.
val push : 'a ‑> ('b, 'a) t ‑> unitpush v src sets the value at src to v and propagates the update
* through the dataflow graph.
attach src dst sends values from src to dst. Be careful not to
* create a cyclc. If you do, an infinite loop will occur while propagating
* values.
val from_pipe : 'a ‑> 'a Async.Pipe.Reader.t ‑> (cannot_receive, 'a) tfrom_pipe init reader creates a node initialized to init that is
* updated with values from reader.
*
* Note: You cannot create an edge to this node, but you can create an edge
* from this node to another that accepts values of type 'a.
val to_pipe : ('b, 'a) t ‑> 'a * 'a Async.Pipe.Reader.tto_pipe src returns the current value of src and a pipe that carries
* all future values of src.