-)O      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH I J K L M N  Safe-Inferred*(c) 2012 Ian-Woo KimBSD3!Ian-Woo Kim <ianwookim@gmail.com> experimentalGHC Safe-Inferredevent or action action order     (c) 2012 Ian-Woo KimBSD3!Ian-Woo Kim <ianwookim@gmail.com> experimentalGHC Safe-Inferred*246 )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 coroutine2command functor of general bidirectional coroutineaConsumer type is a single-sided coroutine which only gets an input without producing output. ,await command functor for consumer coroutineeGenerator 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 inputprimitive request coroutine +connecting server and client in error monadcombine 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 coroutineclient coroutine       (c) 2012 Ian-Woo KimBSD3!Ian-Woo Kim <ianwookim@gmail.com> experimentalGHC Safe-Inferred!"HM!)convenient error state monad for object "Server object base coroutine# Client object$ Server object%/output of methdo of an object with signature s (.input of method of an object with signature s !"#$%&'()* !"#$%&'()* ()%'&$#"!*!"#$%'&()*(c) 2012 Ian-Woo KimBSD3!Ian-Woo Kim <ianwookim@gmail.com> experimentalGHCNone!"24 +,-./01234+,-./012 0143./-,+2+,-./01234(c) 2012 Ian-Woo KimBSD3!Ian-Woo Kim <ianwookim@gmail.com> experimentalGHCNone!"=M56789:;<56789:;<69875:;<56987:;<None!"24M=driver client >driver ?signature of IO event driverB basic driver Csingle event dispatch D1a single feedback step of multiple event dispatchE*full multiple event dispatch with feedbackFconvenience routine for driver =>?@ABCDEF =>?@ABCDEF ?@>=ABCDEF =>?@ABCDEF(c) 2012 Ian-Woo KimBSD3!Ian-Woo Kim <ianwookim@gmail.com> experimentalGHCNoneGGGG  Safe-Inferred!"MI first is HIJKLHIJKLIJHKLHIJKL None!"MMNMNMNMNO     !"#$%&'()*+,+--./0123456789:;<=>?@ABCDEFGHIJK L M N O P Q RScoroutine-object-0.3Control.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<==| mapStateDown $fFunctorRqst $fFunctorAwt $fFunctorYld$fMonadStatestFreeTEStTSObjBTCObjTSObjTResIgnArgquery LogClient LogServerLogInputLogOpWriteLogMonadLogscribewriteLog $fMonadLogIO $fMonadLogtWorldWorldOp FlushQueueFlushLog GiveEvent giveEventflushLog flushQueue DrvClientDriverDrvOpDispatchdispatchdriversingleDispatch multiDispatchmultiDispatchTillEndfire eventHandlerIOActorIOOp DoIOAction doIOAction ioactorgen simpleloggerloggerW