组合scalaz io效果对象
我试图使用scalaz的ioeffect IO[E,A]monad作为一段非常有效的代码 我试图用IO[E,A]在高层重写的代码包含了一些关于存储在云中的文件的元数据。代码试图:组合scalaz io效果对象,scala,scalaz,io-monad,Scala,Scalaz,Io Monad,我试图使用scalaz的ioeffect IO[E,A]monad作为一段非常有效的代码 我试图用IO[E,A]在高层重写的代码包含了一些关于存储在云中的文件的元数据。代码试图: 下载该文件 从文件中提取字符串 构建包含文件文本内容的pojo 将pojo提交到某个队列/restful服务 这些步骤的细节并不重要,但我想做的是按照以下思路做一些事情: def processShareActivity(fileObject: FileObject): IO[ProcessFileFailure, I
def processShareActivity(fileObject: FileObject): IO[ProcessFileFailure, IndexResponse] = {
for {
file <- downloadFile (fileObject)
text <- extractText (file)
searchFileObject <- IO.point(buildSearchFileObject (fileObject, file, text))
indexedResponse <- indexSearchFileObject (searchFileObject)
} yield indexedResponse
}
def indexSearchFileObject(fileObject: SearchFileObject): IO[IndexFailure, IndexResponse] = ???
def buildSearchFileObject(fileObject: FileObject, file: File, str: String): SearchFileObject = ???
def extractText(file: File): IO[ExtractionFailure, String] = ???
def downloadFile(fileObject: FileObject): IO[DownloadFileFailure, File] = ???
def processShareActivity(fileObject:fileObject):IO[ProcessFileFailure,IndexResponse]={
为了{
文件不幸的是,您确实需要一种方法来将这些错误统一为一个常见错误:
例如:
sealed trait ProcessFileFailure
object ProcessFileFailure {
case class Index(e: IndexFailure) extends ProcessFileFailure
case class Extraction(e: ExtractionFailure) extends ProcessFileFailure
case class Download(e: DownloadFileFailure) extends ProcessFileFailure
}
你的理解力将变成:
for {
file <- downloadFile (fileObject).leftMap(ProcessFileFailure.Download)
text <- extractText (file).leftMap(ProcessFileFailure.Extraction)
searchFileObject <- IO.point(buildSearchFileObject (fileObject, file, text))
indexedResponse <- indexSearchFileObject (searchFileObject).leftMap(ProcessFileFailure.Index)
} yield indexedResponse
用于{
文件