bracket

bracket

Stream
  .bracket(IO("abc"))(_ => IO("d").void)
  .flatMap { str =>
    Stream.emits(str.toList)
  }
  .compile
  .toList

diagram

bracket (with chunks)

Stream
  .bracket(IO("abc"))(_ => IO("d").void)
  .flatMap { str =>
    Stream.emits(str.toList)
  }
  .compile
  .toList

diagram

raising errors

Stream
  .bracket(IO("abc"))(_ => IO("d").void)
  .flatMap { str =>
    Stream.emits(str.toList).evalTap(x => IO.raiseWhen(x == 'b')(Err))
  }
  .compile
  .toList

diagram

raising errors (with chunks)

Stream
  .bracket(IO("abc"))(_ => IO("d").void)
  .flatMap { str =>
    Stream.emits(str.toList).evalTap(x => IO.raiseWhen(x == 'b')(Err))
  }
  .compile
  .toList

diagram

handing errors

Stream
  .bracket(IO("abc"))(_ => IO("d").void)
  .flatMap { str =>
    Stream.emits(str.toList).evalTap(x => IO.raiseWhen(x == 'b')(Err))
  }
  .flatMap { str =>
    Stream(str).repeatN(2).evalTap(x => IO.raiseWhen(x == 'b')(Err))
  }
  .handleErrorWith(_ => Stream('e', 'f'))
  .compile
  .toList

diagram

handing errors (with chunks)

Stream
  .bracket(IO("abc"))(_ => IO("d").void)
  .flatMap { str =>
    Stream.emits(str.toList).evalTap(x => IO.raiseWhen(x == 'b')(Err))
  }
  .flatMap { str =>
    Stream(str).repeatN(2).evalTap(x => IO.raiseWhen(x == 'b')(Err))
  }
  .handleErrorWith(_ => Stream('e', 'f'))
  .compile
  .toList

diagram