package Ġarrow . effects Ċ Ċ import Ġarrow . Kind Ċ import Ġarrow . core . Either Ċ import Ġarrow . effects . type classes . Async Ċ import Ġarrow . effects . type classes . Effect Ċ import Ġarrow . effects . type classes . Monad De fer Ċ import Ġarrow . effects . type classes . Proc Ċ import Ġarrow . instance Ċ import Ġarrow . type classes .* Ċ import Ġkotlin . coroutines . experimental . Coroutine Context Ċ import Ġarrow . effects . ap Ġas Ġio Ap Ċ import Ġarrow . effects . handleError With Ġas Ġio Handle Error With Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠI OF un ctor Instance Ġ: ĠFun ctor < For IO > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For IO , ĠA >. map ( f : Ġ( A ) Ġ-> ĠB ): ĠIO < B > Ġ= ĊĠĠĠ Ġfix (). map ( f ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Applic ative Instance Ġ: ĠApplic ative < For IO > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For IO , ĠA >. map ( f : Ġ( A ) Ġ-> ĠB ): ĠIO < B > Ġ= ĊĠĠĠ Ġfix (). map ( f ) ĊĊĠ Ġoverride Ġfun Ġ< A > Ġjust ( a : ĠA ): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . just ( a ) ĊĊĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For IO , ĠA >. ap ( ff : ĠIO Of <( A ) Ġ-> ĠB >): ĠIO < B > Ġ= ĊĠĠĠ Ġfix (). io Ap ( ff ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Monad Instance Ġ: ĠMonad < For IO > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For IO , ĠA >. flatMap ( f : Ġ( A ) Ġ-> ĠKind < For IO , ĠB >): ĠIO < B > Ġ= ĊĠĠĠ Ġfix (). flatMap ( f ) ĊĊĠ Ġoverride Ġfun Ġ< A , ĠB > ĠKind < For IO , ĠA >. map ( f : Ġ( A ) Ġ-> ĠB ): ĠIO < B > Ġ= ĊĠĠĠ Ġfix (). map ( f ) ĊĊĠ Ġoverride Ġfun Ġ< A , ĠB > Ġtail Rec M ( a : ĠA , Ġf : Ġkotlin . Function 1 < A , ĠIO Of < arrow . core . Either < A , ĠB >>> ): ĠIO < B > Ġ= ĊĠĠĠ ĠIO . tail Rec M ( a , Ġf ) ĊĊĠ Ġoverride Ġfun Ġ< A > Ġjust ( a : ĠA ): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . just ( a ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Applic ative Error Instance Ġ: ĠIO Applic ative Instance , ĠApplic ative Error < For IO , ĠThrowable > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A > ĠKind < For IO , ĠA >. attempt (): ĠIO < Either < Throwable , ĠA >> Ġ= ĊĠĠĠ Ġfix (). attempt () ĊĊĠ Ġoverride Ġfun Ġ< A > ĠKind < For IO , ĠA >. handleError With ( f : Ġ( Throwable ) Ġ-> ĠKind < For IO , ĠA >): ĠIO < A > Ġ= ĊĠĠĠ Ġfix (). io Handle Error With ( f ) ĊĊĠ Ġoverride Ġfun Ġ< A > Ġraise Error ( e : ĠThrowable ): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . raise Error ( e ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Monad Error Instance Ġ: ĠIO Monad Instance , ĠMonad Error < For IO , ĠThrowable > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A > ĠKind < For IO , ĠA >. attempt (): ĠIO < Either < Throwable , ĠA >> Ġ= ĊĠĠĠ Ġfix (). attempt () ĊĊĠ Ġoverride Ġfun Ġ< A > ĠKind < For IO , ĠA >. handleError With ( f : Ġ( Throwable ) Ġ-> ĠKind < For IO , ĠA >): ĠIO < A > Ġ= ĊĠĠĠ Ġfix (). io Handle Error With ( f ) ĊĊĠ Ġoverride Ġfun Ġ< A > Ġraise Error ( e : ĠThrowable ): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . raise Error ( e ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Monad De fer Instance Ġ: ĠIO Monad Error Instance , ĠMonad De fer < For IO > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A > Ġdefer ( fa : Ġ() Ġ-> ĠIO Of < A >): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . defer ( fa ) ĊĊĠ Ġoverride Ġfun Ġlazy (): ĠIO < Unit > Ġ= ĠIO . lazy Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Async Instance Ġ: ĠIO Monad De fer Instance , ĠAsync < For IO > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A > Ġasync ( fa : ĠProc < A >): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . async ( fa ) ĊĊĠ Ġoverride Ġfun Ġ< A > ĠIO Of < A >. continue On ( ctx : ĠCor outine Context ): ĠKind < For IO , ĠA > Ġ= ĊĠĠĠ Ġfix (). continue On ( ctx ) ĊĊĠ Ġoverride Ġfun Ġ< A > Ġinvoke ( fa : Ġ() Ġ-> ĠA ): ĠIO < A > Ġ= ĊĠĠĠ ĠIO . invoke ( fa ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Effect Instance Ġ: ĠIO Async Instance , ĠEffect < For IO > Ġ{ ĊĠ Ġoverride Ġfun Ġ< A > ĠKind < For IO , ĠA >. run Async ( cb : Ġ( Either < Throwable , ĠA >) Ġ-> ĠKind < For IO , ĠUnit >): ĠIO < Unit > Ġ= ĊĠĠĠ Ġfix (). run Async ( cb ) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIO Mon oid Instance < A > Ġ: ĠMon oid < Kind < For IO , ĠA >>, ĠSem ig roup < Kind < For IO , ĠA >> Ġ{ ĊĊĠ Ġfun ĠSM (): ĠMon oid < A > ĊĊĠ Ġoverride Ġfun ĠIO Of < A >. combine ( b : ĠIO Of < A >): ĠIO < A > Ġ= ĊĠĠĠ Ġfix (). flatMap Ġ{ Ġa 1 : ĠA Ġ-> Ġb . fix (). map Ġ{ Ġa 2 : ĠA Ġ-> ĠSM (). run Ġ{ Ġa 1 . combine ( a 2 ) Ġ} Ġ} Ġ} ĊĊĠ Ġoverride Ġfun Ġempty (): ĠIO < A > Ġ= ĠIO . just ( SM (). empty ()) Ċ } Ċ Ċ @ instance ( IO :: class ) Ċ interface ĠIOS em ig roup Instance < A > Ġ: ĠSem ig roup < Kind < For IO , ĠA >> Ġ{ ĊĊĠ Ġfun ĠSG (): ĠSem ig roup < A > ĊĊĠ Ġoverride Ġfun ĠIO Of < A >. combine ( b : ĠIO Of < A >): ĠIO < A > Ġ= ĊĠĠĠ Ġfix (). flatMap Ġ{ Ġa 1 : ĠA Ġ-> Ġb . fix (). map Ġ{ Ġa 2 : ĠA Ġ-> ĠSG (). run Ġ{ Ġa 1 . combine ( a 2 ) Ġ} Ġ} Ġ} Ċ } Ċ Ċ object ĠIO Context Ġ: ĠIO Effect Instance Ċ Ċ infix Ġfun Ġ< A > ĠFor IO . Companion . extensions ( f : ĠIO Context . () Ġ-> ĠA ): ĠA Ġ= ĊĠ Ġf ( IO Context )