···11/*
22 A sink has the signature: `signalT('a) => unit`
33 A source thus has the signature: `sink => unit`, or `(signalT('a) => unit) => unit`
44+55+ Effectively a sink is a callback receiving signals as its first argument.
66+ - Start(talkback) will be carrying a talkback using which the sink can attempt
77+ to pull values (Pull) or request the source to end its stream (End)
88+ - Push(payload) carries a value that the source sends to the sink.
99+ This can happen at any time, since a source can be both pullable or
1010+ merely listenable.
1111+ - End signifies the end of the source stream, be it because of a talkback (End)
1212+ or because the source is exhausted.
1313+1414+ In detail, a talkback is simply a callback that receives a talkback signal as
1515+ its first argument. It's thus typically anonymously created by the source.
1616+1717+ A source is a factory that accepts a sink. Calling a source with a sink will
1818+ instantiate and initiate the source's stream, after which the source sends the sink
1919+ a talkback (Start(talkback)). This is called the "handshake".
2020+2121+ Typically an operator factory won't call the source with a sink it receives
2222+ immediately—because this would cause the operator to simply be a noop—but instead
2323+ it will create an intermediate sink with the same signature to perform its own
2424+ logic.
2525+2626+ At that point the operator can for instance intercept the talkback for its own
2727+ purposes, or call the actual sink as it sees fit.
428 */
2929+530type talkbackT =
631 | Pull
732 | End;