Are there any conversions from Either
to Try
and vice versa in the Scala standard library ? Maybe I am missing something but I did not find them.
In Scala Either, functions exactly similar to an Option. The only dissimilarity is that with Either it is practicable to return a string which can explicate the instructions about the error that appeared.
The Try type represents a computation that may either result in an exception, or return a successfully computed value. It's similar to, but semantically different from the scala. util. Either type. Instances of Try[T] , are either an instance of scala.
To the best of my knowledge this does not exist in the standard library. Although an Either
is typically used with the Left
being a failure and the Right
being a success, it was really designed to support the concept of two possible return types with one not necessarily being a failure case. I'm guessing these conversions that one would expect to exist do not exist because Either
was not really designed to be a Success/Fail monad like Try
is. Having said that it would be pretty easy to enrich Either
yourself and add these conversions. That could look something like this:
object MyExtensions { implicit class RichEither[L <: Throwable,R](e:Either[L,R]){ def toTry:Try[R] = e.fold(Failure(_), Success(_)) } implicit class RichTry[T](t:Try[T]){ def toEither:Either[Throwable,T] = t.transform(s => Success(Right(s)), f => Success(Left(f))).get } } object ExtensionsExample extends App{ import MyExtensions._ val t:Try[String] = Success("foo") println(t.toEither) val t2:Try[String] = Failure(new RuntimeException("bar")) println(t2.toEither) val e:Either[Throwable,String] = Right("foo") println(e.toTry) val e2:Either[Throwable,String] = Left(new RuntimeException("bar")) println(e2.toTry) }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With