我们正在使用看起来像这样的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 => Unit
和Reader => 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[???]
}
}
答案 0 :(得分:0)
我最喜欢的选项是
def readFile[T](filePath: String, fileName: String)(f: READER => T): Try[T]
让f决定输出类型。