Actually, when I went to change the output type, I realized this requires that `flush` return an `O`, since `Channel` has no `flatMap`. I think this is still worth doing, since callers can just let `O = Option[X]` for some `X`, and/or many types have a natural empty value anyway.