Я использую эффект кошки 0.10.1 и обнаружил, что в этой версии нет класса типов Bracket
.Так что, кажется, мне нужно ввести какой-то обходной путь для этого.
Я разрабатываю функцию для чтения из какого-либо источника (побочный эффект).Итак, у меня есть \
trait DataFormat
object StreamData{
def apply[T](path: String)(f: (DataFormat, ReadableByteChannel) => T): IO[T] =
IO {
val channel: ReadableByteChannel = Files.newByteChannel(path)
try{
val dataFormat: DataFormat = //...
//in case of GZIP format open GZIPInputStream
f(dataFormat, channel)
} finally {
if(channel != null) channel.close()
}
}
}
Проблема в том, что f: (DataFormat, ReadableByteChannel) => T
нечист.Поэтому я бы сделал это как f: (DataFormat, ReadableByteChannel) => IO[T]
, что делает высвобождение ресурсов в приведенном выше примере невозможным (потому что мне нужно flatMap
в этом случае).
Можете ли вы предложить какие-либо обходные пути и сохранить функциичистый