package Ġio . sm al libs . pil in . standard . continu ation Ċ Ċ import Ġio . sm al libs . pil in . l aws . Monad .` ( a Ġbind Ġf ) Ġbind Ġg Ġ= Ġa Ġbind Ġ{ x Ġin Ġf Ġx Ġbind Ġg }` Ċ import Ġio . sm al libs . pil in . l aws . Monad .` a Ġbind Ġreturns Ġ= Ġa ` Ċ import Ġio . sm al libs . pil in . l aws . Monad .` returns Ġa Ġbind Ġh Ġ= Ġh Ġa ` Ċ import Ġio . sm al libs . pil in . standard . support . Equ atable Ċ import Ġio . sm al libs . pil in . standard . support . Functions . int Ċ import Ġio . sm al libs . pil in . standard . support . Functions . ret Ċ import Ġio . sm al libs . pil in . standard . support . Functions . str Ċ import Ġio . sm al libs . pil in . standard . support . Generators . continu ation Ċ import Ġio . sm al libs . pil in . type . App Ċ import Ġio . sm al libs . pil in . type . Fun Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġorg . quick the ories . With Quick The ories Ċ Ċ internal Ġclass ĠMonad Test Ġ: ĠWith Quick The ories Ġ{ ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< F > Ġret Str ( r : ĠFun < String , ĠApp < F , ĠString >> ): ĠFun < Int , ĠApp < F , ĠString >> Ġ= ĊĠĠĠĠĠĠĠ Ġret < F , ĠInt , ĠString >( str )( r ) ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< F > Ġret Int ( r : ĠFun < Int , ĠApp < F , ĠInt >> ): ĠFun < String , ĠApp < F , ĠInt >> Ġ= ĊĠĠĠĠĠĠĠ Ġret < F , ĠString , ĠInt >( int )( r ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġa Ġbind Ġh Ġ= Ġh Ġa `() Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( inte gers (). all (), Ġcontinuation < String , ĠString > ()). check Ġ{ Ġa , Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContinu ation . mon ad < String >(). ` returns Ġa Ġbind Ġh Ġ= Ġh Ġa `( ret Str ( r ), Ġa , ĠEqu atable . continu ation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` a Ġbind Ġreturns Ġ= Ġa `() Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( continu ation < Int , ĠInt >( inte gers (). all ())). check Ġ{ Ġa Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContinu ation . mon ad < Int >(). ` a Ġbind Ġreturns Ġ= Ġa `( a , ĠEqu atable . continu ation ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ`( a Ġbind Ġf ) Ġbind Ġg Ġ= Ġa Ġbind Ġ{ x Ġin Ġf Ġx Ġbind Ġg }` () Ġ{ ĊĠĠĠĠĠĠĠ Ġqt (). for All ( continu ation < Int , ĠInt >( inte gers (). all ()), Ġcontinuation < String , ĠInt >(), Ġcontinuation < Int , ĠInt >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check Ġ{ Ġa , Ġrf , Ġrg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContinu ation . mon ad < Int >(). `( a Ġbind Ġf ) Ġbind Ġg Ġ= Ġa Ġbind Ġ{ x Ġin Ġf Ġx Ġbind Ġg }` ( ret Str ( rf ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġret Int ( rg ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEqu atable . continu ation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }