scala - Pattern Matching on Disjunction -
given following:
scala> val err: \/[string, boolean \/ int] = -\/("bad") err: scalaz.\/[string,scalaz.\/[boolean,int]] = -\/(bad)
i wrote function takes \/[string, boolean \/ int]
, returns boolean \/ int
:
scala> def f(x: \/[string, boolean \/ int]): \/[boolean, int] = x match { | case -\/(_) => -\/(false) | case \/-(y) => y | } f: (x: scalaz.\/[string,scalaz.\/[boolean,int]])scalaz.\/[boolean,int]
it appears work expected:
scala> f(err) res6: scalaz.\/[boolean,int] = -\/(false) scala> f(\/-(\/-(5)) | ) res7: scalaz.\/[boolean,int] = \/-(5)
is there more concise, idiomatic scalaz way this?
def f(x: \/[string, boolean \/ int]) = x.getorelse(-\/(false))
Comments
Post a Comment