package Ġarrow . opt ics . instances Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . core .* Ċ import Ġarrow . data . fix Ċ import Ġarrow . core .* Ċ import Ġarrow . data . k Ċ import Ġarrow . instances . list . traverse . traverse Ċ import Ġarrow . instances . option . applic ative . applic ative Ċ import Ġarrow . opt ics .* Ċ import Ġarrow . opt ics . type classes .* Ċ import Ġarrow . opt ics .* Ċ import Ġarrow . opt ics . type classes . Cons Ċ import Ġarrow . opt ics . type classes . Each Ċ import Ġarrow . opt ics . type classes . Filter Index Ċ import Ġarrow . opt ics . type classes . Index Ċ import Ġarrow . type classes . Applic ative Ċ Ċ fun Ġ< A > ĠList Instances . traversal (): ĠTra versal < List < A >, ĠA > Ġ= ĠList Traversal () Ċ Ċ /** Ċ Ġ* Ġ[ Traversal ] Ġfor Ġ[ List ] Ġthat Ġfoc uses Ġin Ġeach Ġ[ A ] Ġof Ġthe Ġsource Ġ[ List ]. Ċ Ġ*/ Ċ interface ĠList Traversal < A > Ġ: ĠTra versal < List < A >, ĠA > Ġ{ ĊĊĠ Ġoverride Ġfun Ġ< F > Ġmodify F ( FA : ĠApplic ative < F >, Ġs : ĠList < A >, Ġf : Ġ( A ) Ġ-> ĠKind < F , ĠA >): ĠKind < F , ĠList < A >> Ġ= ĊĠĠĠ Ġs . k (). traverse ( FA , Ġf ) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOperator Ġoverload Ġto Ġinstantiate Ġtype class Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Index ] Ġinstance Ġfor Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke () Ġ= Ġobject Ġ: ĠList Traversal < A > Ġ{} ĊĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġ< A > ĠList Instances . each (): ĠEach < List < A >, ĠA > Ġ= ĠList Each Instance () Ċ Ċ /** Ċ Ġ* Ġ[ Each ] Ġinstance Ġdefinition Ġfor Ġ[ List ] Ġthat Ġsum mon s Ġa Ġ[ Traversal ] Ġto Ġfocus Ġin Ġeach Ġ[ A ] Ġof Ġthe Ġsource Ġ[ List ]. Ċ Ġ*/ Ċ interface ĠList Each Instance < A > Ġ: ĠEach < List < A >, ĠA > Ġ{ ĊĠ Ġoverride Ġfun Ġeach () Ġ= ĠList Traversal < A >() ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOperator Ġoverload Ġto Ġinstantiate Ġtype class Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Index ] Ġinstance Ġfor Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke () Ġ= Ġobject Ġ: ĠList Each Instance < A > Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< A > ĠList Instances . filter Index (): ĠFilter Index < List < A >, ĠInt , ĠA > Ġ= ĠList Filter Index Instance () Ċ Ċ /** Ċ Ġ* Ġ[ Filter Index ] Ġinstance Ġdefinition Ġfor Ġ[ List ]. Ċ Ġ*/ Ċ interface ĠList Filter Index Instance < A > Ġ: ĠFilter Index < List < A >, ĠInt , ĠA > Ġ{ ĊĠ Ġoverride Ġfun Ġfilter ( p : Ġ( Int ) Ġ-> ĠBoolean ): ĠTra versal < List < A >, ĠA > Ġ= Ġobject Ġ: ĠTra versal < List < A >, ĠA > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< F > Ġmodify F ( FA : ĠApplic ative < F >, Ġs : ĠList < A >, Ġf : Ġ( A ) Ġ-> ĠKind < F , ĠA >): ĠKind < F , ĠList < A >> Ġ= ĊĠĠĠĠĠ Ġs . map Indexed Ġ{ Ġindex , Ġa Ġ-> Ġa Ġto T Ġindex Ġ}. k (). traverse ( FA ) Ġ{ Ġ( a , Ġj ) Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( p ( j )) Ġf ( a ) Ġelse ĠFA . just ( a ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOperator Ġoverload Ġto Ġinstantiate Ġtype class Ġinstance . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Index ] Ġinstance Ġfor Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke () Ġ= Ġobject Ġ: ĠList Filter Index Instance < A > Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< A > ĠList Instances . index (): ĠIndex < List < A >, ĠInt , ĠA > Ġ= ĠList Index Instance () Ċ Ċ /** Ċ Ġ* Ġ[ Index ] Ġinstance Ġdefinition Ġfor Ġ[ List ]. Ċ Ġ*/ Ċ interface ĠList Index Instance < A > Ġ: ĠIndex < List < A >, ĠInt , ĠA > Ġ{ ĊĠ Ġoverride Ġfun Ġindex ( i : ĠInt ): ĠOptional < List < A >, ĠA > Ġ= ĠP Optional ( ĊĠĠĠ Ġget Or Modify Ġ= Ġ{ Ġit . get OrNull ( i )?. right () Ġ?: Ġit . left () Ġ}, ĊĠĠĠ Ġset Ġ= Ġ{ Ġl , Ġa Ġ-> Ġl . map Indexed Ġ{ Ġindex : ĠInt , Ġaa : ĠA Ġ-> Ġif Ġ( index Ġ== Ġi ) Ġa Ġelse Ġaa Ġ} Ġ} ĊĠ Ġ) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke () Ġ= Ġobject Ġ: ĠList Index Instance < A > Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< A > ĠList Instances . cons (): ĠCons < List < A >, ĠA > Ġ= ĠList Cons Instance () Ċ Ċ /** Ċ Ġ* Ġ[ Cons ] Ġinstance Ġdefinition Ġfor Ġ[ List ]. Ċ Ġ*/ Ċ interface ĠList Cons Instance < A > Ġ: ĠCons < List < A >, ĠA > Ġ{ ĊĠ Ġoverride Ġfun Ġcons (): ĠPrism < List < A >, ĠTuple 2 < A , ĠList < A >>> Ġ= ĠP Prism ( ĊĠĠĠ Ġget Or Modify Ġ= Ġ{ Ġlist Ġ-> Ġlist . first OrNull ()?. let Ġ{ ĠTuple 2 ( it , Ġlist . drop ( 1 )) Ġ} ?. right () Ġ?: Ġlist . left () Ġ}, ĊĠĠĠ Ġreverse Get Ġ= Ġ{ Ġ( a , Ġa as ) Ġ-> ĠlistOf ( a ) Ġ+ Ġa as Ġ} ĊĠ Ġ) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke () Ġ= Ġobject Ġ: ĠList Cons Instance < A > Ġ{} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġ< A > ĠList Instances . sn oc (): ĠSn oc < List < A >, ĠA > Ġ= ĠList Sn oc Instance () Ċ Ċ /** Ċ Ġ* Ġ[ Sn oc ] Ġinstance Ġdefinition Ġfor Ġ[ List ]. Ċ Ġ*/ Ċ interface ĠList Sn oc Instance < A > Ġ: ĠSn oc < List < A >, ĠA > Ġ{ ĊĊĠ Ġoverride Ġfun Ġsn oc () Ġ= Ġobject Ġ: ĠPrism < List < A >, ĠTuple 2 < List < A >, ĠA >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Or Modify ( s : ĠList < A >): ĠEither < List < A >, ĠTuple 2 < List < A >, ĠA >> Ġ= ĊĠĠĠĠĠ ĠOption . applic ative (). map ( Try Ġ{ Ġs . drop Last ( 1 ) Ġ}. to Option (), Ġs . last OrNull (). to Option (), Ġ:: identity ) ĊĠĠĠĠĠĠĠ Ġ. fix () ĊĠĠĠĠĠĠĠ Ġ. to Either Ġ{ Ġs Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġreverse Get ( b : ĠTuple 2 < List < A >, ĠA >): ĠList < A > Ġ= ĊĠĠĠĠĠ Ġb . a Ġ+ Ġb . b ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġoperator Ġfun Ġ< A > Ġinvoke () Ġ= Ġobject Ġ: ĠList Sn oc Instance < A > Ġ{} ĊĠ Ġ} Ċ Ċ } Ċ