)%vI      !"#$%&'()*+,-./0123456789:;<=>?@AB C D E F G H  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 IJKL    IJKLGHC experimental!Ian-Woo Kim <ianwookim@gmail.com>None*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 '()*+,-.MN'()*+,-.,-*+)('.'()*+,-.MNGHC experimental!Ian-Woo Kim <ianwookim@gmail.com>None/0123456/01234560321/456/0321456None7driver client 8driver 9signature of IO event driver <basic driver =single event dispatch >2a single feedback step of multiple event dispatch ?+full multiple event dispatch with feedback @ convenience routine for driver 789:;<=>?@ 789:;<=>?@ 9:87;<=>?@ 789:;<=>?@GHC experimental!Ian-Woo Kim <ianwookim@gmail.com>NoneAAAA NoneC first is BCDEFBCDEFCDBEFBCDEF NoneGHGHGHGHO     !"#$%&'('))*+,-./0123456789:;<=>?@ABCDE F G H I J K LMNOPQRScoroutine-object-0.2Control.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 ActionOrderCrtnErrOtherServerFinishedCliTSrvTCrtnTRqstCnsmTAwtGenTYldyieldawaitrequest<==| mapStateDownEStTSObjBTCObjTSObjTResIgnArgquery LogClient LogServerLogInputLogOpWriteLogMonadLogscribewriteLogWorldWorldOp FlushQueueFlushLog GiveEvent giveEventflushLog flushQueue DrvClientDriverDrvOpDispatchdispatchdriversingleDispatch multiDispatchmultiDispatchTillEndfire eventHandlerIOActorIOOp DoIOAction doIOAction ioactorgen simpleloggerloggerW $fFunctorRqst $fFunctorAwt $fFunctorYld$fMonadStatestFreeT $fMonadLogIO $fMonadLogt