@ file : Suppress (" unused ") Ċ Ċ package Ġcom . lo ren z oog . pl ank . shared Ċ Ċ /** Ċ Ġ* ĠEither Ġdatatype Ċ Ġ* Ċ Ġ* ĠNote : Ġnot Ġusing Ġarrow - kt Ġfor Ġmon adic Ġerror Ġhandling Ċ Ġ* Ġbecause Ġthe Ġproject Ġcould Ġturn Ġinto Ġa Ġmp p Ġone Ċ Ġ*/ Ċ sealed Ġclass ĠEither < out ĠA , Ġout ĠB > Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġ< B > Ġpure ( value : ĠB ): ĠEither < *, ĠB > Ġ= ĠRight ( value ) ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠA Ġ: ĠThrowable , ĠB > Ġfrom Exception ( function : Ġ() Ġ-> ĠB ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ ĠRight ( function ()) ĊĠĠĠ Ġ} Ġcatch Ġ( a : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( a Ġis ĠA ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLeft ( a ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Ġa ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠLeft < A >( val Ġa : ĠA ) Ġ: ĠEither < A , ĠNothing >() Ċ Ċ data Ġclass ĠRight < B >( val Ġb : ĠB ) Ġ: ĠEither < Nothing , ĠB >() Ċ Ċ fun Ġ< A , ĠB > ĠEither < A , ĠEither < A , ĠB >> . flatten (): ĠEither < A , ĠB > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠLeft ) Ġreturn Ġthis ĊĊĠ Ġreturn Ġ( this Ġas ĠRight ). b Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġnull Ġif Ġ[ this ] Ġis Ġ[ Right ] Ġand Ġif Ġ[ this ] Ċ Ġ* Ġis Ġ[ Left ] Ġreturn Ġ[ Left . a ] Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ A ? ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB > ĠEither < A , ĠB >. left (): ĠA ? Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġa ĊĠ Ġis ĠRight Ġ-> Ġnull Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġnull Ġif Ġ[ this ] Ġis Ġ[ Left ] Ġand Ġif Ġ[ this ] Ċ Ġ* Ġis Ġ[ Right ] Ġreturn Ġ[ Right . b ] Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ A ? ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB > ĠEither < A , ĠB >. right (): ĠB ? Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġnull ĊĠ Ġis ĠRight Ġ-> Ġb Ċ } Ċ Ċ /** Ċ Ġ* ĠIf Ġ[ this ] Ġis Ġ[ Left ] Ġwill Ġthrow Ċ Ġ* Ġan Ġ[ IllegalStateException ] Ġwith Ċ Ġ* Ġmessage Ġ[ message ] Ċ Ġ* Ċ Ġ* Ġ@ throws Ġ[ IllegalStateException ] Ċ Ġ* Ġ@ return Ġ[ B ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB > ĠEither < A , ĠB >. expect ( message : ĠString ): ĠB Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġthrow ĠIllegalStateException ( message ) ĊĠ Ġis ĠRight Ġ-> Ġb Ċ } Ċ Ċ /** Ċ Ġ* ĠIf Ġ[ this ] Ġis Ġ[ Left ] Ġwill Ġthrow Ċ Ġ* Ġan Ġ[ IllegalStateException ] Ġwith Ċ Ġ* Ġmessage Ġ[ message ] Ċ Ġ* Ċ Ġ* Ġ@ throws Ġ[ IllegalStateException ] Ċ Ġ* Ġ@ return Ġ[ B ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB > ĠEither < A , ĠB >. expect ( message : Ġ( A ) Ġ-> ĠString ): ĠB Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġthrow ĠIllegalStateException ( message ( a )) ĊĠ Ġis ĠRight Ġ-> Ġb Ċ } Ċ Ċ /** Ċ Ġ* ĠIf Ġ[ this ] Ġis Ġ[ Left ] Ġwill Ġthrow Ġ[ A ] Ċ Ġ* Ġand Ġif Ġnot Ġwill Ġreturn Ġ[ B ] Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ B ] Ċ Ġ*/ Ċ fun Ġ< A Ġ: ĠThrowable , ĠB > ĠEither < A , ĠB >. unwrap (): ĠB Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġthrow Ġa ĊĠ Ġis ĠRight Ġ-> Ġb Ċ } Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġ[ B ] Ġinto Ġ[ R ] Ġwith Ġ[ map ] Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ Either ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB , ĠR > ĠEither < A , ĠB >. map ( map : Ġ( B ) Ġ-> ĠR ): ĠEither < A , ĠR > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġthis ĊĠ Ġis ĠRight Ġ-> ĠRight ( map ( b )) Ċ } Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġ[ B ] Ġinto Ġ[ R ] Ġwith Ġ[ f map ] Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ Either ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB , ĠR > ĠEither < A , ĠB >. flatMap ( f map : Ġ( B ) Ġ-> ĠEither < A , ĠR >): ĠEither < A , ĠR > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġthis ĊĠ Ġis ĠRight Ġ-> Ġfmap ( b ) Ċ } Ċ Ċ /** Ċ Ġ* ĠTrans forms Ġ[ A ] Ġinto Ġ[ R ] Ġwith Ġ[ f map ] Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ Either ] Ċ Ġ*/ Ċ fun Ġ< A , ĠB , ĠR > ĠEither < A , ĠB >. map Left ( f map : Ġ( A ) Ġ-> ĠR ): ĠEither < R , ĠB > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> ĠLeft ( f map ( a )) ĊĠ Ġis ĠRight Ġ-> Ġthis Ċ } Ċ Ċ fun Ġ< A , ĠB , ĠR > ĠEither < A , ĠB >. fold ( fold Left : Ġ( A ) Ġ-> ĠR , Ġfold Right : Ġ( B ) Ġ-> ĠR ): ĠR Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠ Ġis ĠLeft Ġ-> Ġfold Left ( a ) ĊĠ Ġis ĠRight Ġ-> Ġfold Right ( b ) Ċ } Ċ