/** * @tsplus static effect/core/stream/Channel.Aspects contramapEffect * @tsplus pipeable effect/core/stream/Channel contramapEffect */ export function contramapEffect< Env1, InErr, InDone0, InDone >(f: (i: InDone0) => Effect) { return ( self: Channel ): Channel => contramapMReader(f) >> self } function contramapMReader( f: (i: InDone0) => Effect ): Channel { return Channel.readWith( (inElem) => Channel.write(inElem).flatMap(() => contramapMReader(f) ), (inErr) => Channel.fail(inErr), (inDone) => Channel.fromEffect(f(inDone)) ) }