猫的角色类型效果0.10.1

时间:2018-06-07 12:42:07

标签: scala functional-programming scala-cats io-monad

我正在使用cat-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)。

你能否提出一些关于它的解决方法,同时保持功能纯净?

0 个答案:

没有答案