checked invariants: 1. Event.output only for output sequencers and Event.output only for input sequencers unchecked invariants: 2. only send to a receiver, if an according connection exists 3. address may only contain a port that belongs to the associated client 4. synchronize port capabilities and use of ports as sources and destionations in an event 5. for Event.output h ev, the source of ev must be a port of 'h'. 6. if an event has a time stamp, it must also have a queue 7. If a sequencer is terminated, the queues should be empty, otherwise you may destroy messages, that you already sent. Possible solution for 2: Sequencer.connectTo may return a Marshal.Event.Connect value and the Connect data type is used as field of an event. Discourage manual assembling of Connect types. Using Subscribers as destination is not restricted. It is still possible to use a connection, that is already disconnected. We can reduce the risk of doing so by providing a withConnection function. However, since other ALSA users may disconnect, what we connect, the only possible solution is to let Event.output throw an exception.