
The implementation in STM works well and certainly ticks the battle-tested box:
https://hackage.haskell.org/package/stm-2.4.4.1/docs/ Control-Concurrent-STM-TChan.html#v:newBroadcastTChan
What does the following comment in the documentation really mean (highlighted by >>><<<)? "Create a write-only TChan https://hackage.haskell.org/package/stm-2.4.4.1/docs/Control-Concurrent-STM-....
More precisely, readTChan https://hackage.haskell.org/package/stm-2.4.4.1/docs/Control-Concurrent-STM-... will retry https://hackage.haskell.org/package/stm-2.4.4.1/docs/Control-Monad-STM.html#... even after items have been written to the channel.<<< The only way to read a broadcast channel is to duplicate it with dupTChan https://hackage.haskell.org/package/stm-2.4.4.1/docs/Control-Concurrent-STM-... ."
-- Saurabh.