如何确定函数的输出类型(类型)?

时间:2015-07-22 08:42:55

标签: scala types

我们正在使用看起来像这样的IO Monad:

sealed trait IOCompnent {

  def writer: AbstractWriter
  def reader: AbstractReader

  trait AbstractWriter {
    def writeFile(parentFolder: String, fileName: String)(f: Writer => Unit): Try[Unit]
  }

  trait AbstractReader {
    def readFile(filePath: String, fileName: String)(f: Reader => String): Try[String]
  }
}

由于我们还有一个使用InputStream / OutputStream的类似组件,因此我想通过将Writer => UnitReader => String提取到一个类似的组件来创建一个通用类型。类型(因为InputStream的结果是Array[Byte]而不是String)。

唯一的问题是,readFile方法返回读取函数结果的Try,所以如果我定义readFile函数如下(只读取部分) IOComponent),如何确定Try的类型?

sealed trait ReadComponent[READER] {

  def reader: AbstractReader

  trait AbstractReader {
    def readFile(filePath: String, fileName: String)(f: READER): Try[???]
  }
}

1 个答案:

答案 0 :(得分:0)

我最喜欢的选项是 def readFile[T](filePath: String, fileName: String)(f: READER => T): Try[T]

让f决定输出类型。