···
let make = (f: (. observerT('a)) => teardownT): sourceT('a) =>
-
let teardown = ref((.) => ());
-
| Close => teardown^(.)
-
next: value => sink(. Push(value)),
-
complete: () => sink(. End),
···
-
if (signal === Close) {
-
state.sinks = Rebel.Array.filter(state.sinks, x => x !== sink);
···
let empty = (sink: sinkT('a)): unit => {
-
sink(. Start(talkbackPlaceholder));
···
+
| Close => ended := true
+
mutable teardown: (. unit) => unit,
let make = (f: (. observerT('a)) => teardownT): sourceT('a) =>
+
let state: makeStateT = {teardown: (.) => (), ended: false};
+
| Close when !state.ended =>
···
+
state.sinks = Rebel.Array.filter(state.sinks, x => x !== sink)
···
let empty = (sink: sinkT('a)): unit => {
+
let ended = ref(false);
+
| Close => ended := true