Treatment arrange



◻ T (any)


⇥ a: Stream<T>
⇥ b: Stream<T>
⇥ select: Stream<bool>


↦ value: Stream<T>

Arrange two streams as one.

The two streams are merged using the select stream:

  • when true, value from a is used;
  • when false, value from b is used.

ℹ️ No value from either a or b are discarded, they are used when select give turn.

⚠️ When select ends merge terminates without treating the remaining values from a and b. When select give turn to a or b while the concerned stream is ended, the merge terminates. Merge continues as long as select and concerned stream does, while the other can be ended.

graph LR
     A["… 🟦 🟫 …"] -->|a| T
     B["… 🟧 🟪 🟨 …"] -->|b| T
     O["… 🟩 🟥 🟥 🟩 🟥 …"] -->|select|T

     T -->|value| V["… 🟦 🟧 🟪 🟫 🟨 …"]

     style V fill:#ffff,stroke:#ffff
     style O fill:#ffff,stroke:#ffff
     style A fill:#ffff,stroke:#ffff
     style B fill:#ffff,stroke:#ffff