Why Scala's Try has no type parameter for exception type? -
Why Scala's Try has no type parameter for exception type? -
i'm curious why scala.util.try has no type parameter exception type like
abstract class try[+e <: throwable, +t] { recoverwith[u >: t](f: partialfunction[e, try[e, u]]): try[e, u] ... } would help documentation, e.g
def parseint(s: string): try[numberformatexception, int] still won't able express disjoint exception types throws securityexception, illegalargumentexception, @ to the lowest degree 1 step in direction.
this might you're looking for:
import scala.util.control.exception._ import scala.util.{ success, failure } def foo(x: int): int = x match { case 0 => 3 case 1 => throw new numberformatexception case _ => throw new nullpointerexception } val success(3) = catching(classof[numberformatexception]).withtry(foo(0)) val failure(_: numberformatexception) = catching(classof[numberformatexception]).withtry(foo(1)) // val neverreturns = catching(classof[numberformatexception]).withtry(foo(2)) see scala.util.control.exception$
however, there's no way specialize try[t] hypothetical try[exctype, t]; in order work you'll need either (but perchance more sophisticated such scalaz.\/, or, more 1 exception class, shapeless' coproduct):
def bar(x: int): either[numberformatexception, int] = { catching(classof[numberformatexception]).withtry(foo(x)) match { case success(x) => right(x) case failure(exc) => left(exc.asinstanceof[numberformatexception]) } } println(bar(0)) // right(3) println(bar(1)) // left(java.lang.numberformatexception) // println(bar(2)) // throws nullpointerexception it should possible generalize generic helper works number of exception types. you'd have work shapeless' coproduct , facilities abstracting on arity in case. unfortunately, it's non-trivial exercise , don't have time implement right now.
scala exception-handling try-catch algebraic-data-types
Comments
Post a Comment