Кронштейн класса типов у кошек с эффектом 0.10.1 - PullRequest
0 голосов
/ 07 июня 2018

Я использую эффект кошки 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 в этом случае).

Можете ли вы предложить какие-либо обходные пути и сохранить функциичистый

...