package Ġarrow . opt ics . type classes Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . opt ics . Fold Ċ import Ġarrow . opt ics . Iso Ċ import Ġarrow . opt ics . Lens Ċ import Ġarrow . opt ics . Optional Ċ import Ġarrow . opt ics . Prism Ċ import Ġarrow . opt ics . Setter Ċ import Ġarrow . opt ics . Traversal Ċ import Ġarrow . type classes . Tra verse Ċ Ċ /** Ċ Ġ* Ġan k _ macro _ hierarchy ( arrow . opt ics . type classes . Each ) Ċ Ġ* Ċ Ġ* Ġ[ Each ] Ġprovides Ġa Ġ[ Traversal ] Ġthat Ġcan Ġfocus Ġinto Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] Ċ Ġ* Ċ Ġ* Ġ@ param ĠS Ġsource Ġof Ġthe Ġ[ Traversal ] Ċ Ġ* Ġ@ param ĠA Ġfocus Ġof Ġ[ Traversal ] Ċ Ġ*/ Ċ interface ĠEach < S , ĠA > Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠProvide Ġa Ġ[ Traversal ] Ġfor Ġa Ġstructure Ġ[ S ] Ġwith Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return Ġ[ Traversal ] Ġprovided Ġby Ġ[ Each ] Ġinstance ĊĠĠ Ġ*/ ĊĠ Ġfun Ġeach (): ĠTra versal < S , ĠA > ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Lens ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Lens ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠLens < T , ĠS >. every : ĠTra versal < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Iso ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Iso ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠI so < T , ĠS >. every : ĠTra versal < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Prism ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Prism ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠPrism < T , ĠS >. every : ĠTra versal < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Optional ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Optional ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠOptional < T , ĠS >. every : ĠTra versal < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Setter ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Setter ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Setter ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠSetter < T , ĠS >. every : ĠSetter < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Traversal ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Traversal ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠTra versal < T , ĠS >. every : ĠTra versal < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠDSL Ġto Ġcompose Ġ[ Each ] Ġwith Ġa Ġ[ Fold ] Ġfor Ġa Ġstructure Ġ[ S ] Ġto Ġsee Ġall Ġits Ġf oci Ġ[ A ] ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ receiver Ġ[ Fold ] Ġwith Ġa Ġfocus Ġin Ġ[ S ] ĊĠĠ Ġ* Ġ@ return Ġ[ Fold ] Ġwith Ġa Ġfocus Ġin Ġ[ A ] ĊĠĠ Ġ*/ ĊĠ Ġval Ġ< T > ĠFold < T , ĠS >. every : ĠFold < T , ĠA > Ġget () Ġ= Ġthis . compose ( each ()) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLift Ġan Ġinstance Ġof Ġ[ Each ] Ġusing Ġan Ġ[ Iso ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠEA Ġ[ Each ] Ġthat Ġcan Ġprovide Ġ[ Traversal ] Ġfor Ġa Ġstructure Ġ[ A ] Ġwith Ġa Ġfocus Ġin Ġ[ B ] ĊĠĠĠĠ Ġ* Ġ@ param Ġiso Ġ[ Iso ] Ġthat Ġdefines Ġan Ġis om orphism Ġbetween Ġ[ S ] Ġand Ġ[ A ] ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Each ] Ġto Ġprovide Ġ[ Traversal ] Ġfor Ġstructure Ġ[ S ] Ġwith Ġfocus Ġin Ġ[ B ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< S , ĠA , ĠB > Ġfrom Iso ( EA : ĠEach < A , ĠB >, Ġiso : ĠI so < S , ĠA >): ĠEach < S , ĠB > Ġ= Ġobject Ġ: ĠEach < S , ĠB > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġeach (): ĠTra versal < S , ĠB > Ġ= Ġiso Ġcompose ĠEA . each () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġan Ġinstance Ġof Ġ[ Each ] Ġfrom Ġa Ġ[ Tra verse ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠT Ġ[ Tra verse ] Ġto Ġcreate Ġ[ Each ] Ġinstance Ġfrom ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Each ] Ġthat Ġprovides Ġ[ Traversal ] Ġcreated Ġfrom Ġ[ Tra verse ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< S , ĠA > Ġfrom Tra verse ( T : ĠTra verse < S >): ĠEach < Kind < S , ĠA >, ĠA > Ġ= Ġobject Ġ: ĠEach < Kind < S , ĠA >, ĠA > Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġeach (): ĠTra versal < Kind < S , ĠA >, ĠA > Ġ= ĠTra versal . from Tra versable ( T ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ Ċ } Ċ