LYR-MIG0501
a task without a form
A note of lyric fix --from-4: a use of Lyric 4's std.task that the migration cannot write: a wait for a descriptor or an interrupt, a spawn apart from its run(), a coroutine held in a value, interrupt(), pending(), or the module named by an alias.
Explanation
Lyric 5's tasks wait by calling, not by yielding what they wait for. The migration writes yield Wait.Now and yield Wait.Sleep(ms), and the spawns of plain calls with the run() that follows them in their block. The rest is left as written.
I/O parks by itself in Lyric 5, so a wait for a descriptor goes away with the read or the write it preceded. os.signals(Signal.Interrupt) gives a channel for an interrupt. Start tasks in a TaskScope, whose close() waits for them, or with spawnDetached, which nobody waits for; spawn returns a handle to keep.
Example
by hand[LYR-MIG0501] main.lyr:8:5: 'spawn' of Lyric 4 has no form here: it stands apart from its 'run()', or takes a coroutine held in a value — start the tasks in a 'TaskScope', whose 'close()' waits for them, or with 'spawnDetached'