package Ġio . sm al libs . pil in . ab stractions Ċ Ċ import Ġio . sm al libs . pil in . type . App Ċ import Ġio . sm al libs . pil in . type . Fun Ċ Ċ object ĠFun ctor Ġ{ ĊĊĠĠĠ Ġinterface ĠCore < F > Ġ{ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġ< A , ĠB > Ġmap ( f : ĠFun < A , ĠB >): ĠFun < App < F , ĠA >, ĠApp < F , ĠB >> ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠOperation < F >( private Ġval Ġc : ĠCore < F >) Ġ: ĠCore < F > Ġby Ġc Ġ{ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġ< A , ĠB > Ġreplace ( a : ĠA ): ĠFun < App < F , ĠB >, ĠApp < F , ĠA >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Ġ{ Ġa Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġ< A > Ġvoid ( ma : ĠApp < F , ĠA >): ĠApp < F , ĠUnit > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace < Unit , ĠA >( Unit )( ma ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠIn fix < F >( private Ġval Ġc : ĠCore < F >) Ġ: ĠCore < F > Ġby Ġc Ġ{ ĊĠĠĠĠĠĠĠ Ġsuspend Ġin fix Ġfun Ġ< A , ĠB > ĠFun < A , ĠB >. map ( ma : ĠApp < F , ĠA >): ĠApp < F , ĠB > Ġ= Ġc . map ( this )( ma ) ĊĠĠĠĠĠĠĠ Ġsuspend Ġin fix Ġfun Ġ< A , ĠB > ĠApp < F , ĠA >. map ( f : ĠFun < A , ĠB >): ĠApp < F , ĠB > Ġ= Ġc . map ( f )( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠAPI < F > Ġ: ĠCore < F > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperation : ĠOperation < F > Ġget () Ġ= ĠOperation ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġin fix : ĠIn fix < F > Ġget () Ġ= ĠIn fix ( this ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ