package Ġarrow . type classes Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . Kind De precation Ċ import Ġarrow . core . Eval Ċ import Ġarrow . core . For List K Ċ import Ġarrow . core . None Ċ import Ġarrow . core . Option Ċ import Ġarrow . core . Sequence K Ċ import Ġarrow . core . Some Ċ import Ġarrow . core . fix Ċ import Ġarrow . core . k Ċ Ċ /** Ċ Ġ* ĠThe ĠAltern ative Ġtype Ġclass Ġis Ġfor ĠApplic ative Ġfunct ors Ġwhich Ġalso Ġhave Ġa Ġmon oid Ġstructure . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ< a Ġhref =" http :// arrow - kt . io / docs / arrow / type classes / alternative /"> Alternative Ġdocumentation </ a > Ċ Ġ*/ Ċ @ Deprecated ( Kind De precation ) Ċ interface ĠAltern ative < F > Ġ: ĠApplic ative < F >, ĠMon oid K < F > Ġ{ ĊĠ Ġ/** ĊĠĠ Ġ* ĠRe pe ats Ġthe Ġcomputation Ġuntil Ġit Ġfails . ĠRequires Ġit Ġto Ġsucceed Ġat Ġleast Ġonce . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġcomputation Ġto Ġrepeat . ĊĠĠ Ġ* Ġ@ returns Ġthe Ġcollection Ġof Ġresults Ġwith Ġat Ġleast Ġ 1 Ġrepet ition . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< A > ĠKind < F , ĠA >. some (): ĠKind < F , ĠSequence K < A >> Ġ= ĊĠĠĠ Ġap Eval ( Eval . later Ġ{ Ġmany (). map Ġ{ Ġ{ Ġa : ĠA Ġ-> Ġ( sequence Of ( a ) Ġ+ Ġit ). k () Ġ} Ġ} Ġ}). value () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠRe pe ats Ġthe Ġcomputation Ġuntil Ġit Ġfails . ĠDoes Ġnot Ġrequires Ġit Ġto Ġsucceed . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġcomputation Ġto Ġrepeat . ĊĠĠ Ġ* Ġ@ returns Ġthe Ġcollection Ġof Ġresults . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< A > ĠKind < F , ĠA >. many (): ĠKind < F , ĠSequence K < A >> Ġ= ĊĠĠĠ Ġsome (). orElse ( just ( empty Sequence < A >(). k ())) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCombin es Ġtwo Ġcomput ations . ĊĠĠ Ġ* ĠIn fix Ġalias Ġover Ġ[ orElse ]. ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġcomputation Ġto Ġcombine Ġwith Ġ[ b ]. ĊĠĠ Ġ* Ġ@ param Ġb Ġcomputation Ġto Ġcombine Ġwith Ġ[ this @ orElse ]. ĊĠĠ Ġ* Ġ@ returns Ġa Ġcombination Ġof Ġboth Ġcomput ations . ĊĠĠ Ġ*/ ĊĠ Ġin fix Ġfun Ġ< A > ĠKind < F , ĠA >. alt ( b : ĠKind < F , ĠA >): ĠKind < F , ĠA > Ġ= ĊĠĠĠ Ġthis . orElse ( b ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠCombin es Ġtwo Ġcomput ations . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġcomputation Ġto Ġcombine Ġwith Ġ[ b ]. ĊĠĠ Ġ* Ġ@ param Ġb Ġcomputation Ġto Ġcombine Ġwith Ġ[ this @ orElse ]. ĊĠĠ Ġ* Ġ@ returns Ġa Ġcombination Ġof Ġboth Ġcomput ations . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< A > ĠKind < F , ĠA >. orElse ( b : ĠKind < F , ĠA >): ĠKind < F , ĠA > ĊĊĠ Ġoverride Ġfun Ġ< A > ĠKind < F , ĠA >. combine K ( y : ĠKind < F , ĠA >): ĠKind < F , ĠA > Ġ= ĊĠĠĠ Ġor Else ( y ) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠWrap s Ġthe Ġresult Ġin Ġan Ġoptional . ĠThis Ġnever Ġfails . ĊĠĠ Ġ* Ġ@ receiver Ġcomputation Ġto Ġexecute ĊĠĠ Ġ* Ġ@ return ĠOption Ġwith Ġeither Ġthe Ġresult Ġor Ġnone Ġin Ġcase Ġit Ġfailed ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< A > ĠKind < F , ĠA >. optional (): ĠKind < F , ĠOption < A >> Ġ= ĊĠĠĠ Ġmap (:: Some ). orElse ( just ( None )) ĊĊĠ Ġfun Ġguard ( b : ĠBoolean ): ĠKind < F , ĠUnit > Ġ= ĊĠĠĠ Ġif Ġ( b ) Ġjust ( Unit ) Ġelse Ġempty () ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠLazy Ġor Ġelse , Ġuseful Ġwhen Ġtra ver sing Ġa Ġstructure Ġwith Ġas um Ġwhich Ġshort Ġcirc uits Ġon Ġsuccess . ĠIn Ġgeneral Ġthis Ġshould Ġbe Ġimplemented ĊĠĠ Ġ* Ġ Ġfor Ġevery ĠAltern ative Ġthat Ġmodels Ġsuccess Ġand Ġfailure . ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< A > ĠKind < F , ĠA >. lazy OrElse ( b : Ġ() Ġ-> ĠKind < F , ĠA >): ĠKind < F , ĠA > Ġ= ĊĠĠĠ Ġor Else ( b ()) Ċ } Ċ Ċ // ĠTODO Ġmove Ġback Ġto Ġalternative Ġonce Ġarrow - meta Ġis Ġused Ġto Ġhandle Ġ@ extension Ġbecause Ġcurrently Ġthis Ġbreaks Ġfor Ġlists Ġand Ġsequences Ċ fun Ġ< T , ĠF , ĠA > ĠKind < T , ĠKind < F , ĠA >> . alt Sum ( AF : ĠAltern ative < F >, ĠFT : ĠFold able < T >): ĠKind < F , ĠA > Ġ= ĠAF . run Ġ{ ĊĠ ĠFT . run Ġ{ ĊĠĠĠ Ġfold Right ( Eval . now ( empty < A > ())) Ġ{ Ġv , Ġacc Ġ-> ĊĠĠĠĠĠ ĠEval . later Ġ{ Ġv . lazy OrElse Ġ{ Ġacc . value () Ġ} Ġ} ĊĠĠĠ Ġ}. value () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< T , ĠF , ĠA > ĠKind < T , ĠA >. alt Fold ( AF : ĠAltern ative < F >, ĠFT : ĠFold able < T >): ĠKind < F , ĠA > Ġ= ĊĠ ĠFT . run Ġ{ Ġto List (). alt From List ( AF ) Ġ} Ċ Ċ fun Ġ< F , ĠA > ĠList < A >. alt From List ( AF : ĠAltern ative < F >): ĠKind < F , ĠA > Ġ= ĊĠ Ġmap Ġ{ ĠAF . just ( it ) Ġ}. k (). alt Sum ( ĊĠĠĠ ĠAF , ĊĠĠĠ Ġobject Ġ: ĠFold able < For List K > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For List K , ĠA >. fold Left ( b : ĠB , Ġf : Ġ( B , ĠA ) Ġ-> ĠB ): ĠB Ġ= ĊĠĠĠĠĠĠĠ Ġfix (). fold Left ( b , Ġf ) ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For List K , ĠA >. fold Right ( lb : ĠEval < B >, Ġf : Ġ( A , ĠEval < B >) Ġ-> ĠEval < B >): ĠEval < B > Ġ= ĊĠĠĠĠĠĠĠ Ġfix (). fold Right ( lb , Ġf ) ĊĠĠĠ Ġ} ĊĠ Ġ) Ċ Ċ fun Ġ< F , ĠA > ĠOption < A >. alt From Option ( AF : ĠAltern ative < F >): ĠKind < F , ĠA > Ġ= ĊĠ Ġfold ({ ĠAF . empty () Ġ}, Ġ{ ĠAF . just ( it ) Ġ}) Ċ