The XMonad window manager is configured in Haskell.
That means that when you want to apply a new configuration you actually build
xmonad itself incorporating code from your configuration file.
It sounds more painful than it is -
when you install xmonad you get an executable called xmonad
that handles the
details of bootstrapping your custom build.
The command xmonad --recompile
builds ~/.xmonad/xmonad.hs
,
and subsequent invocations of xmonad
run the executable that is produced.
When you configure xmonad you are actually writing your own version of the
program.
Because you can write arbitrary code the possibilities for customization are
endless!
As with any software project,
you get maximum expressive power when you bring in third-party libraries.
xmonad-contrib
is a popular choice -
but you can import any Haskell library that you want.
With libraries come the problem of managing library packages.
In the past I used the cabal
command to globally install library packages.
From time to time I would clear out my installed packages,
or change something while working on another Haskell project,
and then my window manager would stop working.
I wanted a better option.