haskell@gentoo.org
D-Bus is a simple, message-based protocol for inter-process
communication, which allows applications to interact with other parts of
the machine and the user's session using remote procedure calls.
D-Bus is a essential part of the modern Linux desktop, where it replaces
earlier protocols such as CORBA and DCOP.
This library is an implementation of the D-Bus protocol in Haskell. It
can be used to add D-Bus support to Haskell applications, without the
awkward interfaces common to foreign bindings.
Example: connect to the session bus, and get a list of active names.
@
{-\# LANGUAGE OverloadedStrings \#-}
import Data.List (sort)
import DBus
import DBus.Client
main = do
  client <- connectSession
  //
  \-- Request a list of connected clients from the bus
  reply <- call_ client (methodCall \"\/org\/freedesktop\/DBus\" \"org.freedesktop.DBus\" \"ListNames\")
  { methodCallDestination = Just \"org.freedesktop.DBus\"
  }
  //
  \-- org.freedesktop.DBus.ListNames() returns a single value, which is
  \-- a list of names (here represented as [String])
  let Just names = fromVariant (methodReturnBody reply !! 0)
  //
  \-- Print each name on a line, sorted so reserved names are below
  \-- temporary names.
  mapM_ putStrLn (sort names)
@
>$ ghc --make list-names.hs
>$ ./list-names
>:1.0
>:1.1
>:1.10
>:1.106
>:1.109
>:1.110
>ca.desrt.dconf
>org.freedesktop.DBus
>org.freedesktop.Notifications
>org.freedesktop.secrets
>org.gnome.ScreenSaver