package Ġarrow . opt ics . dsl Ċ Ċ import Ġarrow . opt ics .* Ċ import Ġarrow . opt ics . type classes . Index Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġa Ġ[ Lens ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Lens ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Optional ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠLens < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠOptional < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġan Ġ[ Iso ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Iso ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Optional ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠI so < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠOptional < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġa Ġ[ Prism ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Prism ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Optional ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠPrism < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠOptional < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġan Ġ[ Optional ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Optional ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Optional ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠOptional < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠOptional < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġa Ġ[ Setter ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Setter ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Setter ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ]. Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠSetter < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠSetter < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġa Ġ[ Traversal ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ]. Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠTra versal < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠTra versal < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ Ċ /** Ċ Ġ* ĠDSL Ġto Ġcompose Ġ[ Index ] Ġwith Ġa Ġ[ Fold ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġfocus Ġin Ġon Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ] Ċ Ġ* Ċ Ġ* Ġ@ receiver Ġ[ Fold ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] Ċ Ġ* Ġ@ param ĠID Ġ[ Index ] Ġinstance Ġto Ġprovide Ġa Ġ[ Optional ] Ġto Ġfocus Ġinto Ġ[ S ] Ġat Ġ[ I ] Ċ Ġ* Ġ@ param Ġi Ġindex Ġ[ I ] Ġto Ġfocus Ġinto Ġ[ S ] Ġand Ġfind Ġfocus Ġ[ A ] Ċ Ġ* Ġ@ return Ġ[ Fold ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] Ġat Ġgiven Ġindex Ġ[ I ]. Ċ Ġ*/ Ċ fun Ġ< T , ĠS , ĠI , ĠA > ĠFold < T , ĠS >. index ( ID : ĠIndex < S , ĠI , ĠA >, Ġi : ĠI ): ĠFold < T , ĠA > Ġ= Ġthis . compose ( ID . index ( i )) Ċ