Well-known service, path, and interface names.
Some D-Bus functions can only fail on out-of-memory conditions. I don't think there is much we can do in those cases.
Other D-Bus functions can fail with other sorts of errors, which are
raised as dynamic exceptions. Errors can be caught with
catch, like this:
do conn <- DBus.busGet DBus.System doSomethingWith conn `catch` (\(DBus.Error name msg) -> putStrLn ("D-Bus error! " ++ msg))