The select
in Go can include a default case when there is no other available communication. A default case makes select
non-blocking.
In our Haskell-version select
, we can simply add an operation to the end of our list which never blocks.
select [ readTQueue c >>= (\i -> return $ do
-- use i
)
, return $ do
-- if `readTQueue c` block
]
The sample code on the right side also implements functions similar to time.Tick
and time.After
from Go.