package Ġcom . br ais gab in . show med am oney . data Ċ Ċ import Ġarrow . core . Either Ċ import Ġcom . br ais gab in . show med am oney . domain . Contacts Repository Ċ import Ġcom . br ais gab in . show med am oney . entities . Contact Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠContact s Data Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġapi Source : ĠContact s Api Source , ĊĠĠĠ Ġprivate Ġval Ġdevice Source : ĠContact s Device Source Ċ ) Ġ: ĠContact s Repository Ġ{ ĊĠ Ġoverride Ġfun Ġretrieve Contacts (): ĠSingle < Either < Throwable , ĠList < Contact >>> Ġ{ ĊĠĠĠ Ġreturn ĠSingle . zip ( ĊĠĠĠĠĠĠĠ Ġapi Source . retrieve Contacts (), ĊĠĠĠĠĠĠĠ Ġdevice Source . retrieve Contacts (), ĊĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġapi Response , Ġdevice Response Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġapi Response . fold ( Ġ// ĠI Ġneed Ġto Ġlearn Ġmore Ġfunctional ... Ġthere Ġmust Ġbe Ġan Ġeasier Ġway ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġapi Response Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġapi Contacts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Response . fold ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdevice Response Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdevice Contacts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEither . right ( api Contacts . plus ( device Contacts )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠ Ġ} Ċ } Ċ