package Ġarrow . core Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . core . Either . Left Ċ import Ġarrow . core . Either . Right Ċ import Ġarrow . high er kind Ċ Ċ /** Ċ Ġ* ĠPort Ġof Ġhttps :// github . com / scala / scala / blob / v 2 . 1 2 . 1 / src / library / scala / util / Either . scala Ċ Ġ* Ċ Ġ* ĠRepresents Ġa Ġvalue Ġof Ġone Ġof Ġtwo Ġpossible Ġtypes Ġ( a Ġdis joint Ġunion .) Ċ Ġ* ĠAn Ġinstance Ġof ĠEither Ġis Ġeither Ġan Ġinstance Ġof Ġ[ Left ] Ġor Ġ[ Right ]. Ċ Ġ*/ Ċ @ high er kind Ċ sealed Ġclass ĠEither < out ĠA , Ġout ĠB > Ġ: ĠEither Of < A , ĠB > Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġis Ġa Ġ[ Right ], Ġ` false ` Ġotherwise . ĊĠĠ Ġ* ĠUsed Ġonly Ġfor Ġperformance Ġinstead Ġof Ġfold . ĊĠĠ Ġ*/ ĊĠ Ġinternal Ġabstract Ġval Ġis Right : ĠBoolean ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġis Ġa Ġ[ Left ], Ġ` false ` Ġotherwise . ĊĠĠ Ġ* ĠUsed Ġonly Ġfor Ġperformance Ġinstead Ġof Ġfold . ĊĠĠ Ġ*/ ĊĠ Ġinternal Ġabstract Ġval Ġis Left : ĠBoolean ĊĊĠ Ġfun Ġis Left (): ĠBoolean Ġ= Ġis Left ĊĊĠ Ġfun Ġis Right (): ĠBoolean Ġ= Ġis Right ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠApplies Ġ` if Left ` Ġif Ġthis Ġis Ġa Ġ[ Left ] Ġor Ġ` if Right ` Ġif Ġthis Ġis Ġa Ġ[ Right ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠExample : ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* Ġval Ġresult : ĠEither < Exception , ĠValue > Ġ= Ġpossibly Fail ing Operation () ĊĠĠ Ġ* Ġresult . fold ( ĊĠĠ Ġ* ĠĠĠĠĠ Ġ{ Ġlog (" operation Ġfailed Ġwith Ġ$ it ") Ġ}, ĊĠĠ Ġ* ĠĠĠĠĠ Ġ{ Ġlog (" operation Ġsucceeded Ġwith Ġ$ it ") Ġ} ĊĠĠ Ġ* Ġ) ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġif Left Ġthe Ġfunction Ġto Ġapply Ġif Ġthis Ġis Ġa Ġ[ Left ] ĊĠĠ Ġ* Ġ@ param Ġif Right Ġthe Ġfunction Ġto Ġapply Ġif Ġthis Ġis Ġa Ġ[ Right ] ĊĠĠ Ġ* Ġ@ return Ġthe Ġresults Ġof Ġapplying Ġthe Ġfunction ĊĠĠ Ġ*/ ĊĠ Ġinline Ġfun Ġ< C > Ġfold ( if Left : Ġ( A ) Ġ-> ĠC , Ġif Right : Ġ( B ) Ġ-> ĠC ): ĠC Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠRight Ġ-> Ġif Right ( b ) ĊĠĠĠ Ġis ĠLeft Ġ-> Ġif Left ( a ) ĊĠ Ġ} ĊĊĠ Ġfun Ġ< C > Ġfold Left ( initial : ĠC , Ġright Operation : Ġ( C , ĠB ) Ġ-> ĠC ): ĠC Ġ= ĊĠĠĠ Ġfix (). let Ġ{ Ġeither Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( either ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠRight Ġ-> Ġright Operation ( initial , Ġeither . b ) ĊĠĠĠĠĠĠĠ Ġis ĠLeft Ġ-> Ġinitial ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġ< C > Ġfold Right ( initial : ĠEval < C >, Ġright Operation : Ġ( B , ĠEval < C >) Ġ-> ĠEval < C >): ĠEval < C > Ġ= ĊĠĠĠ Ġfix (). let Ġ{ Ġeither Ġ-> ĊĠĠĠĠĠ Ġwhen Ġ( either ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠRight Ġ-> Ġright Operation ( either . b , Ġinitial ) ĊĠĠĠĠĠĠĠ Ġis ĠLeft Ġ-> Ġinitial ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠIf Ġthis Ġis Ġa Ġ` Left `, Ġthen Ġreturn Ġthe Ġleft Ġvalue Ġin Ġ` Right ` Ġor Ġvice Ġvers a . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠExample : ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĠLeft (" left "). swap () ĠĠ Ġ// ĠResult : ĠRight (" left ") ĊĠĠ Ġ* ĠRight (" right "). swap () Ġ// ĠResult : ĠLeft (" right ") ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ*/ ĊĠ Ġfun Ġswap (): ĠEither < B , ĠA > Ġ= Ġfold ({ ĠRight ( it ) Ġ}, Ġ{ ĠLeft ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġgiven Ġfunction Ġis Ġapplied Ġif Ġthis Ġis Ġa Ġ` Right `. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠExample : ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĠRight ( 1 2 ). map Ġ{ Ġ" flower " Ġ} Ġ// ĠResult : ĠRight (" flower ") ĊĠĠ Ġ* ĠLeft ( 1 2 ). map Ġ{ Ġ" flower " Ġ} Ġ Ġ// ĠResult : ĠLeft ( 1 2 ) ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ*/ ĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġinline Ġfun Ġ< C > Ġmap ( f : Ġ( B ) Ġ-> ĠC ): ĠEither < A , ĠC > Ġ= ĊĠĠĠ Ġflat Map Ġ{ ĠRight ( f ( it )) Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġgiven Ġfunction Ġis Ġapplied Ġif Ġthis Ġis Ġa Ġ` Left `. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠExample : ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĠRight ( 1 2 ). map Left Ġ{ Ġ" flower " Ġ} Ġ// ĠResult : ĠRight ( 1 2 ) ĊĠĠ Ġ* ĠLeft ( 1 2 ). map Left Ġ{ Ġ" flower " Ġ} Ġ Ġ// ĠResult : ĠLeft (" flower ) ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ*/ ĊĠ Ġinline Ġfun Ġ< C > Ġmap Left ( f : Ġ( A ) Ġ-> ĠC ): ĠEither < C , ĠB > Ġ= ĊĠĠĠ Ġfold ({ ĠLeft ( f ( it )) Ġ}, Ġ{ ĠRight ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠMap Ġover ĠLeft Ġand ĠRight Ġof Ġthis ĠEither ĊĠĠ Ġ*/ ĊĠ Ġinline Ġfun Ġ< C , ĠD > Ġb imap ( left Operation : Ġ( A ) Ġ-> ĠC , Ġright Operation : Ġ( B ) Ġ-> ĠD ): ĠEither < C , ĠD > Ġ= ĊĠĠĠ Ġfold ({ ĠLeft ( left Operation ( it )) Ġ}, Ġ{ ĠRight ( right Operation ( it )) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġ` false ` Ġif Ġ[ Left ] Ġor Ġreturns Ġthe Ġresult Ġof Ġthe Ġapplication Ġof ĊĠĠ Ġ* Ġthe Ġgiven Ġpredicate Ġto Ġthe Ġ[ Right ] Ġvalue . ĊĠĠ Ġ* ĊĠĠ Ġ* ĠExample : ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĠRight ( 1 2 ). exists Ġ{ Ġit Ġ> Ġ 1 0 Ġ} Ġ// ĠResult : Ġtrue ĊĠĠ Ġ* ĠRight ( 7 ). exists Ġ{ Ġit Ġ> Ġ 1 0 Ġ} Ġ Ġ// ĠResult : Ġfalse ĊĠĠ Ġ* ĊĠĠ Ġ* Ġval Ġleft : ĠEither < Int , ĠInt > Ġ= ĠLeft ( 1 2 ) ĊĠĠ Ġ* Ġleft . exists Ġ{ Ġit Ġ> Ġ 1 0 Ġ} ĠĠĠĠĠ Ġ// ĠResult : Ġfalse ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ*/ ĊĠ Ġfun Ġexists ( predicate : Ġ( B ) Ġ-> ĠBoolean ): ĠBoolean Ġ= ĊĠĠĠ Ġfold ({ Ġfalse Ġ}, Ġ{ Ġpredicate ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠReturns Ġa Ġ[ Some ] Ġcontaining Ġthe Ġ[ Right ] Ġvalue ĊĠĠ Ġ* Ġif Ġit Ġexists Ġor Ġa Ġ[ None ] Ġif Ġthis Ġis Ġa Ġ[ Left ]. ĊĠĠ Ġ* ĊĠĠ Ġ* ĠExample : ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ* ĠRight ( 1 2 ). to Option () Ġ// ĠResult : ĠSome ( 1 2 ) ĊĠĠ Ġ* ĠLeft ( 1 2 ). to Option () Ġ Ġ// ĠResult : ĠNone ĊĠĠ Ġ* Ġ``` ĊĠĠ Ġ*/ ĊĠ Ġfun Ġto Option (): ĠOption < B > Ġ= ĊĠĠĠ Ġfold ({ ĠNone Ġ}, Ġ{ ĠSome ( it ) Ġ}) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġleft Ġside Ġof Ġthe Ġdis joint Ġunion , Ġas Ġopposed Ġto Ġthe Ġ[ Right ] Ġside . ĊĠĠ Ġ*/ ĊĠ Ġ@ Suppress (" Data Class Private Constructor ") ĊĠ Ġdata Ġclass ĠLeft < out ĠA > Ġ@ Published Api Ġinternal Ġconstructor ( val Ġa : ĠA ) Ġ: ĠEither < A , ĠNothing >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġis Left ĊĠĠĠĠĠ Ġget () Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġval Ġis Right ĊĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke ( a : ĠA ): ĠEither < A , ĠNothing > Ġ= ĠLeft ( a ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠThe Ġright Ġside Ġof Ġthe Ġdis joint Ġunion , Ġas Ġopposed Ġto Ġthe Ġ[ Left ] Ġside . ĊĠĠ Ġ*/ ĊĠ Ġ@ Suppress (" Data Class Private Constructor ") ĊĠ Ġdata Ġclass ĠRight < out ĠB > Ġ@ Published Api Ġinternal Ġconstructor ( val Ġb : ĠB ) Ġ: ĠEither < Nothing , ĠB >() Ġ{ ĊĠĠĠ Ġoverride Ġval Ġis Left ĊĠĠĠĠĠ Ġget () Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġis Right ĊĠĠĠĠĠ Ġget () Ġ= Ġtrue ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġoperator Ġfun Ġ< B > Ġinvoke ( b : ĠB ): ĠEither < Nothing , ĠB > Ġ= ĠRight ( b ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġfun Ġ< L > Ġleft ( left : ĠL ): ĠEither < L , ĠNothing > Ġ= ĠLeft ( left ) ĊĊĠĠĠ Ġfun Ġ< R > Ġright ( right : ĠR ): ĠEither < Nothing , ĠR > Ġ= ĠRight ( right ) ĊĊĠĠĠ Ġtail rec Ġfun Ġ< L , ĠA , ĠB > Ġtail Rec M ( a : ĠA , Ġf : Ġ( A ) Ġ-> ĠKind < Either Partial Of < L >, ĠEither < A , ĠB >> ): ĠEither < L , ĠB > Ġ{ ĊĠĠĠĠĠ Ġval Ġev : ĠEither < L , ĠEither < A , ĠB >> Ġ= Ġf ( a ). fix () ĊĠĠĠĠĠ Ġreturn Ġwhen Ġ( ev ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLeft Ġ-> ĠLeft ( ev . a ) ĊĠĠĠĠĠĠĠ Ġis ĠRight Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġb : ĠEither < A , ĠB > Ġ= Ġev . b ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( b ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLeft Ġ-> Ġtail Rec M ( b . a , Ġf ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠRight Ġ-> ĠRight ( b . b ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< L , ĠR > Ġcond ( test : ĠBoolean , Ġif True : Ġ() Ġ-> ĠR , Ġif False : Ġ() Ġ-> ĠL ): ĠEither < L , ĠR > Ġ= Ġif Ġ( test ) Ġright ( if True ()) Ġelse Ġleft ( if False ()) ĊĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< L > ĠLeft ( left : ĠL ): ĠEither < L , ĠNothing > Ġ= ĠEither . left ( left ) Ċ Ċ fun Ġ< R > ĠRight ( right : ĠR ): ĠEither < Nothing , ĠR > Ġ= ĠEither . right ( right ) Ċ Ċ /** Ċ Ġ* ĠBind s Ġthe Ġgiven Ġfunction Ġacross Ġ[ Either . Right ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġf ĠThe Ġfunction Ġto Ġbind Ġacross Ġ[ Either . Right ]. Ċ Ġ*/ Ċ inline Ġfun Ġ< A , ĠB , ĠC > ĠEither Of < A , ĠB >. flatMap ( f : Ġ( B ) Ġ-> ĠEither < A , ĠC >): ĠEither < A , ĠC > Ġ= ĊĠ Ġfix (). let Ġ{ ĊĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠ Ġis ĠRight Ġ-> Ġf ( it . b ) ĊĠĠĠĠĠ Ġis ĠLeft Ġ-> Ġit ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġvalue Ġfrom Ġthis Ġ[ Either . Right ] Ġor Ġthe Ġgiven Ġargument Ġif Ġthis Ġis Ġa Ġ[ Either . Left ]. Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* ĠRight ( 1 2 ). getOrElse ( 1 7 ) Ġ// ĠResult : Ġ 1 2 Ċ Ġ* ĠLeft ( 1 2 ). getOrElse ( 1 7 ) Ġ Ġ// ĠResult : Ġ 1 7 Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ inline Ġfun Ġ< B > ĠEither Of < *, ĠB >. getOrElse ( default : Ġ() Ġ-> ĠB ): ĠB Ġ= ĊĠ Ġfix (). fold ({ Ġdefault () Ġ}, Ġ:: identity ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġvalue Ġfrom Ġthis Ġ[ Either . Right ] Ġor Ġnull Ġif Ġthis Ġis Ġa Ġ[ Either . Left ]. Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* ĠRight ( 1 2 ). or Null () Ġ// ĠResult : Ġ 1 2 Ċ Ġ* ĠLeft ( 1 2 ). or Null () Ġ Ġ// ĠResult : Ġnull Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun Ġ< B > ĠEither Of < *, ĠB >. or Null (): ĠB ? Ġ= ĊĠ Ġget OrElse Ġ{ Ġnull Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġthe Ġvalue Ġfrom Ġthis Ġ[ Either . Right ] Ġor Ġallows Ġclients Ġto Ġtransform Ġ[ Either . Left ] Ġto Ġ[ Either . Right ] Ġwhile Ġproviding Ġaccess Ġto Ċ Ġ* Ġthe Ġvalue Ġof Ġ[ Either . Left ]. Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* ĠRight ( 1 2 ). get Or Handle Ġ{ Ġ 1 7 Ġ} Ġ// ĠResult : Ġ 1 2 Ċ Ġ* ĠLeft ( 1 2 ). get Or Handle Ġ{ Ġit Ġ+ Ġ 5 Ġ} Ġ// ĠResult : Ġ 1 7 Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ inline Ġfun Ġ< A , ĠB > ĠEither Of < A , ĠB >. get Or Handle ( default : Ġ( A ) Ġ-> ĠB ): ĠB Ġ= ĊĠ Ġfix (). fold ({ Ġdefault ( it ) Ġ}, Ġ:: identity ) Ċ Ċ /** Ċ Ġ* Ġ* ĠReturns Ġ[ Either . Right ] Ġwith Ġthe Ġexisting Ġvalue Ġof Ġ[ Either . Right ] Ġif Ġthis Ġis Ġa Ġ[ Either . Right ] Ġand Ġthe Ġgiven Ġpredicate Ċ Ġ* Ġholds Ġfor Ġthe Ġright Ġvalue . Ċ Ġ* Ġ* ĠReturns Ġ` Left ( default )` Ġif Ġthis Ġis Ġa Ġ[ Either . Right ] Ġand Ġthe Ġgiven Ġpredicate Ġdoes Ġnot Ċ Ġ* Ġhold Ġfor Ġthe Ġright Ġvalue . Ċ Ġ* Ġ* ĠReturns Ġ[ Either . Left ] Ġwith Ġthe Ġexisting Ġvalue Ġof Ġ[ Either . Left ] Ġif Ġthis Ġis Ġa Ġ[ Either . Left ]. Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* ĠRight ( 1 2 ). filter OrElse ({ Ġit Ġ> Ġ 1 0 Ġ}, Ġ{ Ġ- 1 Ġ}) Ġ// ĠResult : ĠRight ( 1 2 ) Ċ Ġ* ĠRight ( 7 ). filter OrElse ({ Ġit Ġ> Ġ 1 0 Ġ}, Ġ{ Ġ- 1 Ġ}) Ġ Ġ// ĠResult : ĠLeft (- 1 ) Ċ Ġ* Ċ Ġ* Ġval Ġleft : ĠEither < Int , ĠInt > Ġ= ĠLeft ( 1 2 ) Ċ Ġ* Ġleft . filter OrElse ({ Ġit Ġ> Ġ 1 0 Ġ}, Ġ{ Ġ- 1 Ġ}) ĠĠĠĠĠ Ġ// ĠResult : ĠLeft ( 1 2 ) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ inline Ġfun Ġ< A , ĠB > ĠEither Of < A , ĠB >. filter OrElse ( predicate : Ġ( B ) Ġ-> ĠBoolean , Ġdefault : Ġ() Ġ-> ĠA ): ĠEither < A , ĠB > Ġ= ĊĠ Ġflat Map Ġ{ Ġif Ġ( predicate ( it )) ĠRight ( it ) Ġelse ĠLeft ( default ()) Ġ} Ċ Ċ /** Ċ Ġ* Ġ* ĠReturns Ġ[ Either . Right ] Ġwith Ġthe Ġexisting Ġvalue Ġof Ġ[ Either . Right ] Ġif Ġthis Ġis Ġan Ġ[ Either . Right ] Ġwith Ġa Ġnon - null Ġvalue . Ċ Ġ* ĠThe Ġreturned ĠEither . Right Ġtype Ġis Ġnot Ġnullable . Ċ Ġ* Ġ* ĠReturns Ġ` Left ( default ()) ` Ġif Ġthis Ġis Ġan Ġ[ Either . Right ] Ġand Ġthe Ġexisting Ġvalue Ġis Ġnull Ċ Ġ* Ġ* ĠReturns Ġ[ Either . Left ] Ġwith Ġthe Ġexisting Ġvalue Ġof Ġ[ Either . Left ] Ġif Ġthis Ġis Ġan Ġ[ Either . Left ]. Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* ĠRight ( 1 2 ). left If Null ({ Ġ- 1 Ġ}) ĠĠ Ġ// ĠResult : ĠRight ( 1 2 ) Ċ Ġ* ĠRight ( null ). left If Null ({ Ġ- 1 Ġ}) Ġ// ĠResult : ĠLeft (- 1 ) Ċ Ġ* Ċ Ġ* ĠLeft ( 1 2 ). left If Null ({ Ġ- 1 Ġ}) ĠĠĠ Ġ// ĠResult : ĠLeft ( 1 2 ) Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ inline Ġfun Ġ< A , ĠB > ĠEither Of < A , ĠB ?> . left If Null ( cross inline Ġdefault : Ġ() Ġ-> ĠA ): ĠEither < A , ĠB > Ġ= ĊĠ Ġfix (). flatMap Ġ{ Ġit . right If NotNull Ġ{ Ġdefault () Ġ} Ġ} Ċ Ċ /** Ċ Ġ* ĠReturns Ġ` true ` Ġif Ġthis Ġis Ġa Ġ[ Either . Right ] Ġand Ġits Ġvalue Ġis Ġequal Ġto Ġ` elem ` Ġ( as Ġdetermined Ġby Ġ` == `), Ċ Ġ* Ġreturns Ġ` false ` Ġotherwise . Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* ĠRight (" something "). contains Ġ{ Ġ" something " Ġ} Ġ// ĠResult : Ġtrue Ċ Ġ* ĠRight (" something "). contains Ġ{ Ġ" anything " Ġ} Ġ Ġ// ĠResult : Ġfalse Ċ Ġ* ĠLeft (" something "). contains Ġ{ Ġ" something " Ġ} Ġ Ġ// ĠResult : Ġfalse Ċ Ġ* Ġ Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġelem Ġthe Ġelement Ġto Ġtest . Ċ Ġ* Ġ@ return Ġ` true ` Ġif Ġthe Ġoption Ġhas Ġan Ġelement Ġthat Ġis Ġequal Ġ( as Ġdetermined Ġby Ġ` == `) Ġto Ġ` elem `, Ġ` false ` Ġotherwise . Ċ Ġ*/ Ċ fun Ġ< A , ĠB > ĠEither Of < A , ĠB >. contains ( elem : ĠB ): ĠBoolean Ġ= ĊĠ Ġfix (). fold ({ Ġfalse Ġ}, Ġ{ Ġit Ġ== Ġelem Ġ}) Ċ Ċ fun Ġ< A , ĠB , ĠC > ĠEither Of < A , ĠB >. ap ( ff : ĠEither Of < A , Ġ( B ) Ġ-> ĠC >): ĠEither < A , ĠC > Ġ= ĊĠ Ġff . fix (). flatMap Ġ{ Ġf Ġ-> Ġfix (). map ( f ) Ġ}. fix () Ċ Ċ fun Ġ< A , ĠB > ĠEither Of < A , ĠB >. combine K ( y : ĠEither Of < A , ĠB >): ĠEither < A , ĠB > Ġ= ĊĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠEither . Left Ġ-> Ġy . fix () ĊĠĠĠ Ġelse Ġ-> Ġfix () ĊĠ Ġ} Ċ Ċ fun Ġ< A > ĠA . left (): ĠEither < A , ĠNothing > Ġ= ĠEither . Left ( this ) Ċ Ċ fun Ġ< A > ĠA . right (): ĠEither < Nothing , ĠA > Ġ= ĠEither . Right ( this ) Ċ Ċ /** Ċ Ġ* ĠReturns Ġ[ Either . Right ] Ġif Ġthe Ġvalue Ġof Ġtype ĠB Ġis Ġnot Ġnull , Ġotherwise Ġthe Ġspecified ĠA Ġvalue Ġwrapped Ġinto Ġan Ċ Ġ* Ġ[ Either . Left ]. Ċ Ġ* Ċ Ġ* ĠExample : Ċ Ġ* Ġ``` Ċ Ġ* Ġ" value ". right If NotNull Ġ{ Ġ" left " Ġ} Ġ// ĠRight ( b =" value ") Ċ Ġ* Ġnull . right If NotNull Ġ{ Ġ" left " Ġ} ĠĠĠ Ġ// ĠLeft ( a =" left ") Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun Ġ< A , ĠB > ĠB ?. right If NotNull ( default : Ġ() Ġ-> ĠA ): ĠEither < A , ĠB > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġnull Ġ-> ĠEither . Left ( default ()) ĊĠ Ġelse Ġ-> ĠEither . Right ( this ) Ċ } Ċ