\%      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi j k l m n o p q r s t u v w x y z { | } ~                                    ! " # $ % & ' ( ) * + ,-./0123456789:;<=>?@ A B C D E F G H IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                      !"#$(Safe%&'%&'%&'E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafeThe type of sequencer handles.*Blocking behavior of the sequencer device.Operations may block.%Throw exceptions instead of blocking. }Read/Write permissions for the sequencer device. This way we prevent the ALSA exception 22 "Invalid argument" when calling  event_output on an input-only sequencer.() *+,-./012() *+() *+,-./012Safe345   345 Safe{Creates a new handle and opens a connection to the kernel sequencer interface. After a client is created successfully, a  ClientStartN event is broadcast to the announce port. May throw an exception. See also:  open_lconf, ,  get_seq_type,  get_seq_name,  set_blocking,  get_client_id.vClose the sequencer. Closes the sequencer client and releases its resources. After a client is closed, an event with  ClientExit is broadcast to announce port. The connection between other clients are disconnected. Call this just before exiting your program. NOTE: we could put this in a finalizer for the handle?*This is the name that should be passed to  in most cases.ZGet identifier of a sequencer handle. It is the same identifier specified in the call to .cChange the blocking mode of the given client. In block mode, the client falls into sleep when it fills the output pool with events, or when it demands events from an empty input pool. memory pool with full events. Clients that are sleeping due to loack of space in the output pool are woken when a certain amount of free space becomes available (see set_output_room).*Return the byte size of the output buffer.JResize of the output buffer. This function clears all output events (see  drop_output).%Return the byte size of input buffer.EResize the input buffer. This function clears all input events (see  drop_input).Resize the output memory pool.|Specify how much space should become free before waking clients that are blocked due to a lack of space in the output pool.Reset the output pool.Resize the input memory pool.Reset the input pool.6789:;<=>?@ABThe sequencer's "name". This is not a name that you make up for your own purposes; it has special significance to the ALSA library. Usually you need to pass  here or simply use .Blocking behaviorHandle to the sequencer.Blocking behaviorHandle to the sequencer.Chandle to the sequencerThe sequencer's "name". This is not a name that you make up for your own purposes; it has special significance to the ALSA library. Usually you need to pass  here or simply use .Blocking behavior>Action on the sequencer, the result must be computed strictly.sequencer handleALSA identifier for the handlesequencer handle blocking modeSequencer handle.Size of output buffer in bytes.Sequencer handle.New buffer size in bytes.Sequencer handle.Size of input buffer in bytes.Sequencer handle.New byffer size in bytes.Sequencer handle.New size in bytes.Sequencer handle. Number of bytes need to wake up.Sequencer handle.Sequencer handle.New size in bytes.Sequencer handle.6789:;<=>?@ABC6789:;<=>?@ABCSafe !"DE !" !"DESafeFG#$%&'(H)*+,-.IJKLMNOPQRSFG#%$&'(H)*+,-.IJKLMNOPQRFG#$%&'(H)*+,-.IJKLMNOPQRSSafe #$%&'()*+,-. )*+,-.&'(#$%Safe/!Convert number of nanoseconds to 0(Convert fractional number of seconds to  Time must be non-negative.2!Convert number of nanoseconds to 3(Convert fractional number of seconds to T/01234  !"/01234  !"01/342T/01234E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneI5The type of queue identifiers.UVWXYZ[5\]^6_` UVWXYZ[5\]^6UVWXYZ[5\]^6_`E(c) Henning Thielemann, 2011 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneI7 Port types.8Port capabilities.a<a type that cannot be represented by the other constructors bhardware specific cgeneric MIDI device dGeneral MIDI compatible device eGS compatible device fXG compatible device gMT-32 compatible device h!General MIDI 2 compatible device i Synth device j*Sampling device (support sample download) k7Sampling device (sample can be downloaded at any time) l&This port is implemented in hardware. m&This port is implemented in software. n1Messages sent to this port will generate sounds. okThis port may connect to other devices (whose characteristics are not known). papplication (sequencer/editor) qBa capability that cannot be represented by the other constructors rreadable from this port swritable to this port tallow read subscriptions uallow write subscriptions vallow read/write duplex wallow read subscription xallow write subscription yrouting not allowed zpThe Enum instance may not be very efficient, but it should hardly be used, at all. Better use constants such as > and set manipulation. If the binary logarithm is computed by constant unfolding, performance would be better, but direct set manipulation is still faster. We implement the {| instance in this way, in order to stay independent from the particular ALSA definitions, that may differ between platforms.D78|abcdefghijklmnop}qrstuvwxy9:~;<=>?@ABCDEFGHIJKLMNOPQRSTUVz?78|abcdefghijklmnop}qrstuvwxy9:~;<=>?@ABCDEFGHIJKLMNOPQRSTUV*78|abcdefghijklmnop} qrstuvwxy9:~;<=>?@ABCDEFGHIJKLMNOPQRSTUVz E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneIWThe different types of clients.ZThe type of client identifiers. WXYZ[\]^_ WXYZ[\]^_ WXYZ[\]^_!Nonee$The address of all subscribed ports. `abcdefgh `abcdefgh `abcdefgh"Noneijklijklijkl#J(c) Henning Thielemann, 2011-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneImnopqrstuvwxyz{|}~mnotupqrsvwxyz{|}~?mnopqrstuvwxyz{|}~   J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneDelete the specified queue.startstopcontinue a queueaIn the prototype event you can provide additional information. The prototype event does not need to be a queue control event, this part is ignored anyway. In the prototype event you may also specify a queue. This is the queue that the timestamp of the prototype event refers to. This way you can control the target queue using timing from another queue.Queue.T identifier.Sequencer handle.Queue.T identifier.Sequencer handle.target Queue.T.8prototype event that may provide timestamp, source queue5656$J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafe%NoneI0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object./Remove events according to the given conditions,Copy the content of one object into another.: DestinationSource   8  NoneI :apply the changes in the Remove monad to the Remove record/Remove events according to the given conditionsyAll events in the local input buffer are removed. The conditions are not checked for these events. This is equivalent to &'.Matching events in the local output buffer are removed, too. Matching events in the kernel buffer are removed in any case. If there are no further conditions, then this is equivalent to &(.ALSA maintainers say, that destination address and queue are checked together, at least in the kernel buffer. However up to ALSA-1.0.22 the check for the queue is missing in libasound for the local buffer.$NoteOff events are kept in any case.)      (    Safe    )J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone,Copy the content of one object into another.JCreate a new information area filled with data about the sequencer client.0Allocate an uninitialized object. (Not exported)"8Copy the content of an object to a newly created object.ICreate a new information area filled with data about an arbitrary client.#^Set the information for the sequencer client based on the data in the given information area.$BGet information about the client with the next biggest identifier.+ !"#$%&'()*+,-./0 DestinationSource !"#1$Was there a next client?23) !"#$%&'()*+,-./0 !"#1$* !"#$%&'()*+,-./0 !"#1$23*None 456789:;< 456789:;< 456789:;< J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone%&'()*+ !"#$%&'()*+!"%$&'# ()*+%&'()*+NoneI,=-./>?0123456789:,-./0123456789:,-./0123456789:,=-./>?0123456789:E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone>EGet the client identifier for the sequencer. A convinience function.??Set the name for the sequencer client. A convinience function.>? WXYZ[\]^_>? Z[_\]^>?WXY>? NoneC6Simple subscription (w/o exclusive & time conversion).D6Simple subscription (w/o exclusive & time conversion).ESimple disconnection.FSimple disconnection.GTemporary subscription.HTemporary subscription. @ABC@ABCDEFGH ijkl@ABCDEFGH ijkl@ABCEGDFH @ABC@ABCDEFGH+J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone DVCreate a new information area filled with data about an given port on a given client.E(Get the address of the information area.FSCreate a new information area filled with data about a specific port on our client.G0Allocate an uninitialized object. (Not exported)L[Set the information for the sequencer port based on the data in the given information area.R,Copy the content of one object into another.`8Copy the content of an object to a newly created object.cSet the port address.i3Get information about the first port on our client.jGet information about the port with the next biggest identifier. If a matching port is found, then its information is stored in the given area and H is returned.JIIJKLDMNOPEQRSTUVWXYZ[\]^_`abcdefghiFGJ DestinationSourceKLMNOPQRSTUVWXYZ[\]^_`abcdefghjijklHIIJKLDMNOPEQRSTUVWXYZ[\]^_`abcdefghiFGJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjijIIIJKLDMNOPEQRSTUVWXYZ[\]^_`abcdefghiFGJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjijklE(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNonekCreate a port - simple version.lDelete the port.n6Create a new port, as described by the info structure.oDelete the port. mnopklmnoq%789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVklmno%9:nkolm;<=8>?@ABCDEF7GHIJKLMNOPQRSTUV mnopklmnoqJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneI!prqrssttuvwxyz{|}~pqrstuvwxyz{|}~pqrstuvwxyz{|}~ prqrssttuvwxyz{|}~J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone$IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij$ILhijMJKVXdNZ\^`PRTbfgWYeO[]a_QSUcJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNoneu,Copy the content of one object into another.v0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object.!wxuyz{|}~v DestinationSource wxuyz{|}~vJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone,Copy the content of one object into another.8Copy the content of an object to a newly created object.0Allocate an uninitialized object. (Not exported) DestinationSourceJ(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object.,Copy the content of one object into another.! DestinationSource J(c) Henning Thielemann, 2010-2012 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone,Copy the content of one object into another.0Allocate an uninitialized object. (Not exported)8Copy the content of an object to a newly created object. DestinationSource?(c) Henning Thielemann, 2012 (c) Dylan Simon, 2011BSD3 provisionalNone ,Copy the content of one object into another..Set destination address of a port subscription)Get sender address of a port subscription&Unsubscribe a connection between ports)Set sender address of a port subscription.Get destination address of a port subscription8Copy the content of an object to a newly created object.0Allocate an uninitialized object. (Not exported)Subscribe a port connectionSubscribe a port connection: subscribeSimple5 sender dest exclusive (Just (updatequeue, realtime))Unsubscribe a port connection: unsubscribeSimple sender dest* DestinationSource)?(c) Henning Thielemann, 2012 (c) Dylan Simon, 2011BSD3 provisionalNone 8Copy the content of an object to a newly created object.&Get the client/port address of a query,Copy the content of one object into another.0Allocate an uninitialized object. (Not exported)&Set the client/port address of a query&Get the address of subscriber of queryQuery port subscriber listJQueries a subscriber connected to (Write) or from (Read) a given address:  seq addr typ index0Queries the list of subscribers accessing a port4 DestinationSource1NoneParse the given string into sequencer address. The client and port are separated by either colon or period, e.g. 128:1. The function also accepts client names or prefixes thereof. Throws  (Errno 2)% exception if no client name matches.Sequencer handle.String to be parsed.The parsed address. `abcdefgh `abcdefgh E(c) Henning Thielemann, 2011 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalNone2Wait until all events of the client are processed.Get an event from the input buffer. If the input buffer is empty, then it is filled with data from the sequencer queue. If there is no data in the sequencer queue, then the process is either put to sleep (if the sequencer is operating in blocking mode), or we throw EAGAIN6 (if the sequence is operating in non-blocking mode).We may also throw ENOSPCj, which means that the sequencer queue over-run and some events were lost (this clears the input buffer).Returns the number of events in the input buffer. If the input buffer is empty and the boolean argument is true, then try to fill the input buffer with data from the sequencer queue. See also: .XOutput an event and drain the buffer, if it became full. Throws exceptions. See also: ,  , ,  ,   , ,  5Output an event without draining the buffer. Throws -EAGAIN' if the buffer becomes full. See also .Output an event directly to the sequencer, NOT through the output buffer. If an error occurs, then we throw an exception. See also .IReturn the size (in bytes) of pending events on output buffer. See also .2Extract the first event in output buffer. Throws  (Errno 2)0 exception if output buffer is empty. See also . RRemove the first event in output buffer. Throws an exception on error. See also . Drain output buffer to sequencer. This function drains all pending events on the output buffer. The function returns immediately after the events are sent to the queues regardless whether the events are processed or not. To get synchronization with the all event processes, use H after calling this function. Throws an exception on error. See also: , . hRemove events from both the user-space output buffer, and the kernel-space sequencer queue. See also:  ,  ,  . <Remove events from the user-space output buffer. See also:  . gRemove events from both the user-space input buffer, and the kernel-space sequencer queue. See also: ,  .;Remove events from the user-space input buffer. See also:  ./Make a note whose unspecified fields contain 0.Construct an ALSA sequencer event from very few information. Most fields are initialized with sensible defaults. You may use this as a start and alter its fields for your special needs. x(Event.simple myAddr (Event.simpleNote (Event.Channel 0) (Event.Pitch 60) Event.normalVelocity)) {Event.dest = destAddr}#refill if empty?number of events in buffer*the number of remaining events (or bytes?)!the byte size of remaining events%number of bytes sent to the sequencer!size of pending events (in bytes)2the first event in the buffer (if one was present)  ,byte size of events remaining in the buffer.   mnotupqrsvwxyz{|}~          mnopqrstuvz{|}~wxy#     NoneMWait for any of the given events, like poll, and return the one that is readydWait for new input to be available from the sequencer (even if there is already input in the buffer)rWait until new output may be drained from the buffer to the sequencer (even if the output buffer is already empty)>Wait until new input is available or new output may be drainedA thread-compatible version of  Sound.ALSA.Sequencer.Event.input. This call is always blocking (unless there are already event in the input buffer) but will not block other threads. The sequencer, however, must be set non-blocking or this will not work as expected.A thread-compatible version of !Sound.ALSA.Sequencer.Event.output. This call is always blocking (unless there is space in the output buffer) but will not block other threads. The sequencer, however, must be set non-blocking or this will not work as expected.A thread-compatible version of &Sound.ALSA.Sequencer.Event.drainBuffer. This call is always blocking but will not block other threads. The sequencer, however, must be set non-blocking or this will not work as expected. None  !"#$  !"#$  !"#$  !"#$E(c) Henning Thielemann, 2010 (c) Iavor S. Diatchki, 2007BSD3Henning Thielemann provisionalSafe   ,-./0011223456789:;<=>?@ABCDEFG,HIJKLMNOP,HQRSTUVWXYZ,[\],H^_`abcdefghijklmnopqrstuvwxy \ z { , H | } ~ `!,!H!!!`!}!~!^!_","H""##########\######################################################################,#H#############################################: ,               ),)))=))))))))))))))   ! " # $ %,&=' ( ) * + , - . / 0+,+++++=++1+2+3+4+5+6+7+8+++9+:+;+<+=+>+?+@+A+B+C+D+E+F+++GHIJK,&7C=9;=?135AEF8D:<@>246B !,=LMNOPQRS,TURVS,RWXYZ[\]^S\_`a,RbcdSefgh,iRjklmnopqrstJuvS\wx,i78byz{Rkmo|C}~Sefgh            (  '       HLH    !!!"###############:############ # # # # ############# !$ $i$$"#"$%&'(')'*+:,-./.01%i%%%%2%3%3%,%H%4%5%6%7%8%9%:%;%<%=%>%?%@%A%B%C%D%E%F%%G%:%%H%I%R%j%%%J%%%%%U%K%T%L%M%N%O%P%Q%R%S%T%U%V%S W H X Y Z [ \ ] ^ _ ` a b c d e)f)H)4)g)h)i)j)k)l)m)n)o)p)q)r)s)t)F))G):)i)u)S)v*w*x*y*z*{*|*K*}*~HY[    +++:+i+H+4+g+i+++++++++++++m+n+++++++++s+t+h+j+F++G+u+S+vHY[BiH4sthjFG:H4B86jFG:iiH4BhjFG:iH4lBhjFG:FGH49:AB:nH4BlmFG:              'alsa-seq-0.6.0.7-ArT1Vfhl8lLK0Jj8AlqZmXSound.ALSA.SequencerSound.ALSA.Sequencer.PollSound.ALSA.Sequencer.RealTimeSound.ALSA.Sequencer.TimeSound.ALSA.Sequencer.QueueSound.ALSA.Sequencer.PortSound.ALSA.Sequencer.ClientSound.ALSA.Sequencer.AddressSound.ALSA.Sequencer.ConnectSound.ALSA.Sequencer.Event&Sound.ALSA.Sequencer.Event.RemoveMonadSound.ALSA.Sequencer.Query Sound.ALSA.Sequencer.Client.Info%Sound.ALSA.Sequencer.Client.InfoMonadSound.ALSA.Sequencer.Port.Info#Sound.ALSA.Sequencer.Port.InfoMonadSound.ALSA.Sequencer.Queue.Info!Sound.ALSA.Sequencer.Queue.Status Sound.ALSA.Sequencer.Queue.Tempo Sound.ALSA.Sequencer.Queue.TimerSound.ALSA.Sequencer.Subscribe$Sound.ALSA.Sequencer.Subscribe.QuerySound.ALSA.Sequencer.Concurrent#Sound.ALSA.Sequencer.Event.AccessorSound.ALSA.Sequencer.Utility&Sound.ALSA.Sequencer.Marshal.SequencerSound.ALSA.Sequencer.Sequencer%Sound.ALSA.Sequencer.Marshal.RealTime!Sound.ALSA.Sequencer.Marshal.Time"Sound.ALSA.Sequencer.Marshal.Queue!Sound.ALSA.Sequencer.Marshal.Port#Sound.ALSA.Sequencer.Marshal.Client$Sound.ALSA.Sequencer.Marshal.Address$Sound.ALSA.Sequencer.Marshal.Connect"Sound.ALSA.Sequencer.Marshal.EventSound.ALSA.Sequencer.Area!Sound.ALSA.Sequencer.Event.RemoveEventdropInputBufferdropOutputBuffer'Sound.ALSA.Sequencer.Marshal.ClientInfo,Sound.ALSA.Sequencer.Client.Info.EventFilter%Sound.ALSA.Sequencer.Marshal.PortInfoT BlockModeBlockNonblock DuplexMode InputMode OutputMode AllowOutput AllowInputOpenMode descriptorsopen openDefaultclosewith withDefault defaultNamegetName setBlockinggetOutputBufferSizesetOutputBufferSizegetInputBufferSizesetInputBufferSize setPoolOutputsetPoolOutputRoomresetPoolOutput setPoolInputresetPoolInputConssecsnanoStampTickRealModeAbsoluteRelativemodestampconsAbsconsRel fromInteger fromDoublefromFractional toIntegertoDouble toFractionaldirectTypeCap systemTimersystemAnnounceunknowncapReadcapWrite capSyncRead capSyncWrite capDuplex capSubsRead capSubsWrite capNoExportcaps typeSpecifictypeMidiGeneric typeMidiGM typeMidiGS typeMidiXG typeMidiMT32 typeMidiGM2 typeSynthtypeDirectSample typeSample typeHardware typeSoftwaretypeSynthesizertypePorttypeApplicationtypesUserKernelsystem subscribers broadcastclientportsourcedestDataNoteEvCtrlEvQueueEvAddrEvConnEvEmptyEvCustomEvExtEvPortSubscribedPortUnsubscribed ClientStart ClientExit ClientChange PortStartPortExit PortChangeSysExBounceUserVar0UserVar1UserVar2UserVar3UserVar4EchoOSSUser0User1User2User3User4User5User6User7User8User9 TuneRequestResetSensingNoneUnknown QueueStart QueueContinue QueueStopQueueSetPosTickQueueSetPosTime QueueTempo QueueClock QueueTick QueueSkew QueueSyncPosTempounTempo Controller PgmChange ChanPress PitchBend Control14 NonRegParamRegParamSongPosSongSelQFrameTimeSignKeySignANoteNoteOnNoteOffKeyPress highPrioritytagqueuetimebodyTagunTagCustomcustom0custom1custom2Ctrl ctrlChannel ctrlParam ctrlValueValueunValue Parameter unParameterNote noteChannelnoteNote noteVelocitynoteOffVelocity noteDurationDuration unDurationVelocity unVelocityPitchunPitchChannel unChannelalloc allocNamed withNamedfreecontrolrungetInputsetInputputInput getOutput setOutput putOutput getChannel setChannel putChannel setEventType putEventTypegetTagsetTagputTaggetDestsetDestputDest getIgnoreOff setIgnoreOff putIgnoreOffgetTimesetTimeputTime $fFunctorT$fApplicativeT$fMonadTCinitnextfirstloop_loopcopyclonesetNamegetBroadcastFiltersetBroadcastFiltergetErrorBouncesetErrorBounce getClient setClientgetType getNumPorts getEventLostgetgetAnyset queryNext queryFirst queryLoop_ queryLoop filterClear filterAdd filterDel filterCheckmodifygetIdreverse toSubscribersfromSubscribers createFromcreateTo deleteFromdeleteTowithFromwithTogetPortSpecifiedsetPortSpecifiedgetTimestampingsetTimestampinggetTimestampRealsetTimestampRealgetPortsetPort getCapability setCapabilitygetMidiChannelssetMidiChannels getMidiVoices setMidiVoicesgetSynthVoicessetSynthVoicesgetTimestampQueuesetTimestampQueuegetAddrsetAddr getReadUse getWriteUse createSimple deleteSimple withSimplecreatedelete getLocked setLockedgetOwnersetOwnergetFlagssetFlagsgetQueue$fCT getTickTime getRealTime getEventsgetTemposetTempogetPPQsetPPQgetSkewsetSkew getSkewBase setSkewBaseAlsa MidiClockMidiTicksetType getResolution setResolution $fShowType$fEqType $fOrdType $fEnumTypemallocsetQueue getExclusive setExclusive getTimeUpdate setTimeUpdate getTimeReal setTimeReal getSender setSender subscribePortunsubscribePort subscribe unsubscribeReadWritegetIndexsetIndex getNumSubsgetRootqueryqueryAllparsesyncOutputQueueinput inputPendingoutput outputBuffer outputDirect outputPending extractOutput removeOutput drainOutput dropOutput dropInput simpleNotenormalVelocity offVelocitysimple forSourcePort forConnection customZerothreadWaitInputthreadWaitOutputthreadWaitDuplex timeStampconnect showsField showsRecordcheckResultQueryCore expOpenMode expBlockMode$fAllowInputDuplexMode$fAllowInputInputMode$fAllowOutputDuplexMode$fAllowOutputOutputMode$fOpenModeDuplexMode$fOpenModeInputMode$fOpenModeOutputModesnd_seq_poll_descriptorssnd_seq_poll_descriptors_count _dummyEnumSetsnd_seq_reset_pool_inputsnd_seq_set_client_pool_inputsnd_seq_reset_pool_output#snd_seq_set_client_pool_output_roomsnd_seq_set_client_pool_outputsnd_seq_set_input_buffer_sizesnd_seq_get_input_buffer_sizesnd_seq_set_output_buffer_sizesnd_seq_get_output_buffer_sizesnd_seq_nonblock snd_seq_name snd_seq_close snd_seq_open withOpenMode $fStorableT$fShowT FlagContainerFlagmodeAccstampAcc stampTick stampRealmodeAbsmodeRelpeekpoke peekStamp pokeStamp nanoPerSecondPosition unPositionSkew skewValueskewBaseimpexp$fStorableSkew TypeOther TypeSpecificTypeMIDIGeneric TypeMIDIGM TypeMIDIGS TypeMIDIXG TypeMIDIMT32 TypeMIDIGM2 TypeSynthTypeDirectSample TypeSample TypeHardware TypeSoftwareTypeSynthesizerTypePortTypeApplicationCapOtherCapReadCapWrite CapSyncRead CapSyncWrite CapDuplex CapSubsRead CapSubsWrite CapNoExport$fEnumCapabilityFlagbaseGHC.EnumEnumTypeFlagCapabilityFlag capFlagSet typeFlagSet $fIxTypeFlag$fEnumTypeFlag$fIxCapabilityFlagimpTypeexpEvETypeunEType FlagValueFlagseventLengthFixedeventLengthVariableeventLengthVarUser priorityHighpriorityNormal pokeQueue withMaybepokeBodypokeData pokeHeaderpeekData expQueueEv maxEventTypepeekBody peekNoteEv peekCtrlEv peekQueueEv peekQueueExt peekAddrEv peekConnEv peekEmptyEv peekCustomEv peekExtEv $fTypeConnEv $fTypeAddrEv $fTypeExtEv$fTypeCustomEv $fTypeEmptyEv $fTypeQueueEv $fTypeCtrlEv $fTypeNoteEv$fStorableCustom$fStorableCtrl$fStorableNote $fFlagFlagcontrol_ eventOutput_free_ allocNamed_alloc_ controlCustom eventOutput controlPlainGHC.PtrPtrFunPtrGHC.ForeignPtr ForeignPtrForeign.C.String withCAString peekCStringCStringForeign.Marshal.UtilsForeign.Marshal.AllocallocaForeign.ForeignPtr.ImpwithForeignPtr newForeignPtrForeign.Storable Condition ConditionFlagT_ setTickTime_ getTickTime_ setRealTime_ getRealTime_setDest_getDest_setTag_getTag_ setEventType_ getEventType_ setChannel_ getChannel_ setQueue_ getQueue_ setCondition_ getCondition_run_copy_malloc_ getCondition setCondition getEventType setRealTime setTickTime condInput condOutputcondDestcondDestChannelcondTimeBefore condTimeAfter condTimeTick condEventType condIgnoreOff condTagMatch_applyunpackliftGet liftGetCondliftSet liftSetCond liftPutCondgetCondsetCondputCond modifyCond _getEventType _setEventType getDestQueue setDestQueue getEventLost_ queryNext_set_getAny_get_ getNumPorts_getType_ setClient_ getClient_setErrorBounce_getErrorBounce_setBroadcastFilter_getBroadcastFilter_setName_getName_ queryInit$fCT0check_del_add_clear_clearaddcheck unpackETypesnd_seq_disconnect_tosnd_seq_disconnect_fromsnd_seq_connect_tosnd_seq_connect_from getWriteUse_getTimestampQueue_ghc-prim GHC.TypesTrue getReadUse_setAddr_getAddr_setTimestampQueue_setSynthVoices_getSynthVoices_setMidiVoices_getMidiVoices_setMidiChannels_getMidiChannels_setCapability_getCapability_setPort_getPort_setTimestampReal_getTimestampReal_setTimestamping_getTimestamping_setPortSpecified_getPortSpecified_snd_seq_delete_portsnd_seq_create_portsnd_seq_delete_simple_portsnd_seq_create_simple_port setFlags_ getFlags_ setOwner_ getOwner_ setLocked_ getLocked_ getEvents_ setSkewBase_ getSkewBase_setSkew_getSkew_setPPQ_getPPQ_ setTempo_ getTempo_getResolution_setResolution_setType_expType setTimeReal_getTimeUpdate_unsubscribePort_subscribePort_ setSender_ getSender_ getTimeReal_setTimeUpdate_ setExclusive_ getExclusive_ queryPort_setRoot queryPortsetRoot_getRoot_ getNumSubs_ setIndex_ getIndex_snd_seq_parse_addresssnd_seq_drop_input_buffersnd_seq_drop_inputsnd_seq_drop_output_buffersnd_seq_drop_outputsnd_seq_drain_outputsnd_seq_extract_outputsnd_seq_event_output_pendingsnd_seq_event_output_directsnd_seq_event_output_buffersnd_seq_event_outputsnd_seq_event_input_pendingsnd_seq_event_inputsnd_seq_sync_output_queue checkResultthreadWaitPollsWaitFdWaitRead WaitWrite pollWaitsthreadWaitEvents catchFull catchIntr