IO.within: def of Base Import: import Base Lines 295-302 of Base/base.bend: https://jend.leeeet.dev/read.txt?path=Base/base.bend&start_line=295&end_line=302 import Base # Some{x} if act answers x within ms milliseconds, else None{}. The loser # is not cancelled: it runs to its end before the program exits. def IO.within(-A: Type, ms: U32, act: IO(A)) -> IO(Maybe<&1, A>): won = IO.bind(A, Maybe<&1, A>, act, x => IO.pure(Maybe<&1, A>, Some{x})) late = IO.bind(Unit, Maybe<&1, A>, IO.sleep(ms), u => IO.pure(Maybe<&1, A>, None{})) both = IO.bind(Chan(Maybe<&1, A>), Chan(Maybe<&1, A>), IO.fork(Maybe<&1, A>, won), IO.fork.go(Maybe<&1, A>, late)) IO.bind(Chan(Maybe<&1, A>), Maybe<&1, A>, both, c => IO.join(Maybe<&1, A>, c)) Uses (11): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Chan https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.bind https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.fork https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.fork.go https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.join https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.pure https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=IO.sleep https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Maybe https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Unit