("Ku      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi jklmnopqrst  Safe-Inferredu4Disable sigPIPE. This means that the whole program won'2t crash when the tool exits. Unfortunately there doesn'(t seem to be another way of doing this. uuu Safe-InferredMshell command name raw arguments "streams for input, output, error MMM Safe-Inferred NOPQRSTUV NOPQRSTUV NOPQRSTUV NOPQRSTUV Safe-InferredWXvWXWXWXv Safe-InferredYZ[\]^_`abcdefYZ[\]^_`abcdefYZ[\]^_`abcdef YZ[\]^_`abcdef Safe-InferredwWait the given number of (recip resolution) seconds. gxwygggxwy Safe-InferredzWait the given number of (recip resolution) seconds. hz{|hhhz{|  Safe-Inferredi}~iii}~ Safe-InferredjThe first function assumes, &that the action does not consume time &and that the wait command is precise. 4It is not very useful in practice, but very simple. l*The next set of routines is more precise. ;It computes a time table starting with current system time and tries to stick to it. HSo far, I worked hard to use time differences instead of absolute times @in order to avoid increasing memory consumption of time numbers +(which however slows down as time evolves) ;but the time related functions of the system are absolute, +so have to make our ones absolute as well. m*The wait calls are necessarily quantized, 4but the time passed to the action is not quantized. n This routine is only necessary, 'because differences might be too small +to be noticed in the absolute time values. MThat is, collectCoincident will split events which actually belong together. p(We export this function only for use in #Haskore.RealTime.EventList.TimeTime. jklmnop( !"#$%&'()*+,-./012345678KLjklmnop(L-/.210K867354$#"%! +,*&)('lmnojkpjklmnop Safe-Inferredqrst0 9:;<=>?@ABCDEFGHIJqrst0J9;<FEDCHGBA@ ?>=I rstq:qrst                 ! " # $ % & ' ( ) * + , - . . ./ ." .0 .$ .1 .% .2 . .3 .! .4 .5 .6 .7 .' .( .) .* .8 .9 .+ ., .: .; .< =< >3 >/ >6 >? >@ >A >B >C >D >E >F > > > > >1 >G HB HGIJKLMNOPQRJSGTUVWXYZ[\]^_`aa abcdefghbdef ij^UW^Wk ^ Wghlhaskore-realtime-0.2#Haskore.RealTime.EventList.TimeBody#Haskore.RealTime.EventList.TimeTimeHaskore.RealTime.ShellPipeHaskore.Interface.CSound.PlayHaskore.Interface.MIDI.PlayHaskore.RealTime.Timer Haskore.RealTime.Timer.ImmediateHaskore.RealTime.Timer.ThreadHaskore.RealTime.Timer.PosixHaskore.RealTime.Utilityevent-list-0.1.1.1!Data.EventList.Relative.MixedBody viewBodyL viewTimeLconsTimeconsBody!Data.EventList.Relative.TimeMixed mapBodyInit mapBodyLastmapBodyRsnocTimesnocBody!Data.EventList.Relative.MixedTime mapBodyTail mapBodyHeadmapBodyL Data.EventList.Relative.TimeTimetoAbsoluteEventListresample catMaybesfilter mapCoincidentcollectCoincident decreaseStart concatNaiveconcatinsertmergemapM_mapMmapTimemapBodysnocconspause Data.EventList.Relative.TimeBodydelaycycleappend normalizeflattenslice partitionfoldrmapBodyM getBodiesviewL singletonnullempty Data.EventList.Relative.BodyTime'Data.EventList.Relative.TimeTimePrivate mapTimeInit mapTimeLastmapTimeR mapTimeTail mapTimeHeadmapTimeL viewBodyR viewTimeRT'Data.EventList.Relative.TimeBodyPrivatelaunchplay scorePipetmpWaveplayV4playV5 playNamedPipeplayV5NamedPipeplayV4NamedPipeplayV4AnonymousPipe playSimpleCons getClockTimewaitInt resolutionliftliftIOgetTimeclockTimeToWaitTimegetTimeSecondsclockTimeToSecondswait waitUntilwaitUntilSecondstimer runRelativerunRelativeCorerun runTimeStamprunTimeStampGroupedrunCore attachTime catchCtrlCplayRawunit