úÎ* %åJ      !"#$%&'()*+,-./0123456789:;<=>?@ABC D E F G H I  Safe-InferredGHC experimental!Ian-Woo Kim <ianwookim@gmail.com> Safe-Inferredevent or action action order     GHC experimental!Ian-Woo Kim <ianwookim@gmail.com> Safe-Inferred *type for coroutine status after execution -Coroutine type is regarded as a Client type ? which can be paired with Server type with opposite request  and answer type.  Server type *general symmetric bidirectional coroutine 3command functor of general bidirectional coroutine DConsumer type is a single-sided coroutine which only gets an input  without producing output. -await command functor for consumer coroutine EGenerator type is single-sided coroutine which only gives an output ! without getting any request. yield command functor .primitive coroutine action yielding an output -primitive coroutine action awaiting an input primitive request coroutine ,connecting server and client in error monad @combine state and free monad with base state monad transformer ; with a base monad m to free monad with the base monad m / Think this as fusing down the state monad  server coroutine client coroutine JKLMN    JKLMNGHC experimental!Ian-Woo Kim <ianwookim@gmail.com> Safe-Inferred*convenient error state monad for object Server object base coroutine Client object !Server object "0output of methdo of an object with signature s %/input of method of an object with signature s  !"#$%&'  !"#$%&' %&"$#! ' !"$#%&'GHC experimental!Ian-Woo Kim <ianwookim@gmail.com>None ()*+,-./OP()*+,-./-.+,*)(/()*+,-./OPGHC experimental!Ian-Woo Kim <ianwookim@gmail.com>None01234567012345671432056701432567None8driver client 9driver :signature of IO event driver =basic driver >single event dispatch ?2a single feedback step of multiple event dispatch @+full multiple event dispatch with feedback A convenience routine for driver 89:;<=>?@A 89:;<=>?@A :;98<=>?@A 89:;<=>?@AGHC experimental!Ian-Woo Kim <ianwookim@gmail.com>NoneBBBB  Safe-InferredD first is CDEFGCDEFGDECFGCDEFG NoneHIHIHIHIQ     !"#$%&'()(**+,-./0123456789:;<=>?@ABCDEF G H I J K L MNOPQRSTUcoroutine-object-0.1Control.Monad.Trans.Crtn.QueueControl.Monad.Trans.Crtn.EventControl.Monad.Trans.CrtnControl.Monad.Trans.Crtn.ObjectControl.Monad.Trans.Crtn.LoggerControl.Monad.Trans.Crtn.WorldControl.Monad.Trans.Crtn.Driver%Control.Monad.Trans.Crtn.EventHandler Control.Monad.Trans.Crtn.IOActor&Control.Monad.Trans.Crtn.Logger.SimpleQueuefqueuebqueue emptyQueueenqueuedequeueEvOrAct ActionOrderCrtnErrOtherServerFinishedNoErrorCliTSrvTCrtnTRqstCnsmTAwtGenTYldyieldawaitrequest<==| mapStateDownEStTSObjBTCObjTSObjTResIgnArgquery LogClient LogServerLogInputLogOpWriteLogMonadLogscribewriteLogWorldWorldOp FlushQueueFlushLog GiveEvent giveEventflushLog flushQueue DrvClientDriverDrvOpDispatchdispatchdriversingleDispatch multiDispatchmultiDispatchTillEndfire eventHandlerIOActorIOOp DoIOAction doIOAction ioactorgen simpleloggerloggerW$fErrorCrtnErr $fFunctorRqst $fFunctorAwt $fFunctorYld$fMonadStatestFreeT $fMonadLogIO $fMonadLogt