message: add important note on sink semantic
diff: @@ -5,6 +5,17 @@ import * as R from "../../Ref"
  import * as T from "../internal/effect"
  import * as M from "../internal/managed"
  +// Important notes while writing sinks and combinators:
  +// - What return values for sinks mean:
  +// Effect.unit - "need more values"
  +// Effect.fail([Either.Right(z), l]) - "ended with z and emit leftover l"
  +// Effect.fail([Either.Left(e), l]) - "failed with e and emit leftover l"
  +// - Result of processing of the stream using the sink must not depend on how the stream is chunked
  +// (chunking-invariance)
  +// pipe(stream, run(sink), Effect.either) === pipe(stream, chunkN(1), run(sink), Effect.either)
  +// - Sinks should always end when receiving a `None`. It is a defect to not end with some
  +// sort of result (even a failure) when receiving a `None`.
  +// - Sinks can assume they will not be pushed again after emitting a value.
  export class Sink<S, R, E, I, L, Z> {
  constructor(readonly push: M.Managed<S, R, never, Push<S, R, E, I, L, Z>>) {}
  }
  