Мы с использованием IO монады, которая выглядит следующим образом:Как определить тип вывода функции (типа)?
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[???]
}
}
Как насчет 'def readFile [T] (filePath: String, fileName: String) (f: READER): Попробуйте [T]' ? Возможно, у вас может быть сообщение 'READER [T]'? Или f: Reader => T как: 'def readFile (filePath: String, fileName: String) (f: READER => T): Try [T]' – crak
Я бы пошел дальше и сделаю READER общим, но дон 't использовать его на уровне признаков, потому что он изменяется только на уровне def: def readFile [READER [T]] (filePath: String, fileName: String) (f: READER [T]): Попробуйте [T] – Khanser