Normally, any exceptions raised while executing a method will be
given the generic "org.freedesktop.DBus.Error.Failed" name.
throwError allows the programmer to specify an error name, and provide
additional information to the remote application. You may use this instead
of throwIO to abort a method call.

Automatic method signatures

Used to automatically generate method signatures for introspection
documents. To support automatic signatures, a method's parameters and
return value must all be instances of IsValue.

This class maps Haskell idioms to D-Bus; it is therefore unable to
generate some signatures. In particular, it does not support methods
which accept/return a single structure, or single-element structures.
It also cannot generate signatures for methods with parameters or return
values which are only instances of IsVariant. For these cases, please
use method.

To match common Haskell use, if the return value is a tuple, it will be
converted to a list of return values.

The standard D-Bus implementation from http://dbus.freedesktop.org/
almost always sets signal senders to the unique name of the sending
client. If matchSender is a requested name like
"com.example.Foo", it will not match any signals.

The exception is for signals sent by the bus itself, which always
have a sender of "org.freedesktop.DBus".

Name reservation

Asks the message bus to assign the given name to this client. The bus
maintains a queue of possible owners, where the head of the queue is the
current ("primary") owner.

There are several uses for name reservation:

Clients which export methods reserve a name so users and applications
can send them messages. For example, the GNOME Keyring reserves the name
"org.gnome.keyring" on the user's session bus, and NetworkManager
reserves "org.freedesktop.NetworkManager" on the system bus.

When there are multiple implementations of a particular service, the
service standard will ususally include a generic bus name for the
service. This allows other clients to avoid depending on any particular
implementation's name. For example, both the GNOME Keyring and KDE
KWallet services request the "org.freedesktop.secrets" name on the
user's session bus.

A process with "single instance" behavior can use name assignment to
check whether the instance is already running, and invoke some method
on it (e.g. opening a new window).