Read action

primitive KeepReading
  """
  Returned from `_on_received` to let the read loop take the next message.
  """

primitive YieldReading
  """
  Returned from `_on_received` to stop the read loop after this message, giving
  other actors a turn. Reading resumes on its own in the next scheduler turn.

  Unlike `mute()`, which stops reading until `unmute()` reverses it, this is a
  one-shot pause.
  """

type ReadAction is (KeepReading | YieldReading)
  """
  What the read loop should do once `_on_received` returns.
  """