1

我正在使用cats-effect 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在这种情况下我需要这样做)。

您能否提出任何解决方法并保持功能纯净?

4

0 回答 0