Como converter a opção [Try [_]] para Try [Option [_]]?
Costumo usar a função abaixo para converterOption[Try[_]]
paraTry[Option[_]]
mas parece errado. Essa funcionalidade pode ser expressa de maneira mais idiomática?
def swap[T](optTry: Option[Try[T]]): Try[Option[T]] = {
optTry match {
case Some(Success(t)) => Success(Some(t))
case Some(Failure(e)) => Failure(e)
case None => Success(None)
}
}
Digamos que eu tenha dois valores:
val v1: Int = ???
val v2: Option[Int] = ???
Eu quero fazer uma operaçãoop
(que pode falhar) nesses valores e passar isso para funcionarf
abaixo.
def op(x: Int): Try[String]
def f(x: String, y: Option[String]): Unit
Normalmente, eu uso a compreensão para facilitar a leitura:
for {
opedV1 <- op(v1)
opedV2 <- swap(v2.map(op))
} f(opedV1, opedV2)
PS. Eu gostaria de evitar coisas pesadas como scalaz.