package Ġcom . jit ty andi yan . shared . core . functional ĊĊ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġvalue Ġof Ġone Ġof Ġtwo Ġpossible Ġtypes Ġ( a Ġdis joint Ġunion ). Ċ Ġ* ĠInstances Ġof Ġ[ Either ] Ġare Ġeither Ġan Ġinstance Ġof Ġ[ Failure ] Ġor Ġ[ Success ]. Ċ Ġ* ĠFP ĠCon vention Ġdict ates Ġthat Ġ[ Failure ] Ġis Ġused Ġfor Ġ" failure " Ċ Ġ* Ġand Ġ[ Success ] Ġis Ġused Ġfor Ġ" success ". Ċ Ġ* Ċ Ġ* Ġ@ see ĠFailure Ċ Ġ* Ġ@ see ĠSuccess Ċ Ġ*/ Ċ sealed Ġclass ĠEither < out ĠSuccess Type , Ġout ĠFailure Type > Ġ{ ĊĠĠĠ Ġ/** Ġ* ĠRepresents Ġthe Ġfailure Ġside Ġof Ġ[ Either ] Ġclass Ġwhich Ġby Ġconvention Ġis Ġa Ġ" Failure ". Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠFailure < out ĠFailure Type >( val Ġa : ĠFailure Type ) Ġ: ĠEither < Nothing , ĠFailure Type >() ĊĊĠĠĠ Ġ/** Ġ* ĠRepresents Ġthe Ġsuccess Ġside Ġof Ġ[ Either ] Ġclass Ġwhich Ġby Ġconvention Ġis Ġa Ġ" Success ". Ġ*/ ĊĠĠĠ Ġdata Ġclass ĠSuccess < out ĠSuccess Type >( val Ġb : ĠSuccess Type ) Ġ: ĠEither < Success Type , ĠNothing >() ĊĊĠĠĠ Ġval Ġis Success Ġget () Ġ= Ġthis Ġis ĠSuccess < Success Type > ĊĠĠĠ Ġval Ġis Failure Ġget () Ġ= Ġthis Ġis ĠFailure < Failure Type > ĊĊĠĠĠ Ġfun Ġ< Failure Type > Ġfailure ( a : ĠFailure Type ) Ġ= ĠFailure ( a ) ĊĠĠĠ Ġfun Ġ< Success Type > Ġsuccess ( b : ĠSuccess Type ) Ġ= ĠSuccess ( b ) ĊĊĠĠĠ Ġfun Ġget Success OrNull (): ĠSuccess Type ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this Ġis ĠSuccess ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Failure OrNull (): ĠFailure Type ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this Ġis ĠFailure ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġeither ( fn R : Ġ( Failure Type ) Ġ-> ĠUnit , Ġfn L : Ġ( Success Type ) Ġ-> ĠUnit ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġfn R ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġfn L ( b ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġeither Async ( fn R : Ġsuspend Ġ( Failure Type ) Ġ-> ĠUnit , Ġfn L : Ġsuspend Ġ( Success Type ) Ġ-> ĠUnit ): ĠUnit Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFailure Ġ-> Ġfn R ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSuccess Ġ-> Ġfn L ( b ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ // ĠCred its Ġto ĠAlex ĠH art Ġ-> Ġhttps :// pro android dev . com / kotlin s - nothing - type - 9 4 6 de 7 d 4 6 4 fb Ċ // ĠComp o ses Ġ 2 Ġfunctions Ċ fun Ġ< A , ĠB , ĠC > Ġ(( A ) Ġ-> ĠB ). c ( f : Ġ( B ) Ġ-> ĠC ): Ġ( A ) Ġ-> ĠC Ġ= Ġ{ ĊĠĠĠ Ġf ( this ( it )) Ċ } Ċ Ċ fun Ġ< T , ĠL , ĠR > ĠEither < L , ĠR >. flatMap ( fn : Ġ( L ) Ġ-> ĠEither < T , ĠR >): ĠEither < T , ĠR > Ġ= ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠEither . Failure Ġ-> ĠEither . Failure ( a ) ĊĠĠĠĠĠĠĠ Ġis ĠEither . Success Ġ-> Ġfn ( b ) ĊĠĠĠ Ġ} Ċ Ċ fun Ġ< T , ĠL , ĠR > ĠEither < L , ĠR >. map ( fn : Ġ( L ) Ġ-> Ġ( T )): ĠEither < T , ĠR > Ġ= Ġthis . flatMap ( fn . c (:: success )) Ċ