package Ġarrow . mt l Ċ Ċ import Ġarrow . core . Id Ċ import Ġarrow . core . For Id Ċ import Ġarrow . core . Id Of Ċ import Ġarrow . core . value Ċ import Ġarrow . type classes . Com on ad Ċ import Ġarrow . type classes . internal . Id B imon ad Ċ Ċ fun Ġ< A , ĠB > Ġ(( A ) Ġ-> ĠB ). core ader (): ĠCore ader T < For Id , ĠA , ĠB > Ġ= ĠCore ader ( this ) Ċ Ċ fun Ġ< A , ĠB > ĠCore ader T < For Id , ĠA , ĠB >. run Id ( d : ĠA ): ĠB Ġ= Ġthis . run ( Id ( d )) Ċ Ċ object ĠCore ader Ġ{ ĊĠ Ġoperator Ġfun Ġ< A , ĠB > Ġinvoke ( run : Ġ( A ) Ġ-> ĠB ): ĠCore ader T < For Id , ĠA , ĠB > Ġ= ĠC ok le is li ( Id B imon ad ) Ġ{ Ġa : ĠId Of < A > Ġ-> Ġrun ( a . value ()) Ġ} ĊĊĠ Ġfun Ġ< A , ĠB > Ġjust ( MF : ĠCom on ad < For Id >, Ġx : ĠB ): ĠCore ader T < For Id , ĠA , ĠB > Ġ= ĠC ok le is li . just ( MF , Ġx ) ĊĊĠ Ġfun Ġ< B > Ġask ( MF : ĠCom on ad < For Id >): ĠCore ader T < For Id , ĠB , ĠB > Ġ= ĠC ok le is li . ask ( MF ) Ċ } Ċ