Recs.
Updated
XMonad is a dynamically tiling X11 window manager that is written and configured in Haskell.
SpecsUpdate
Pros
Pro Fully extensible with Haskell
XMonad is written, configured, and fully extensible in Haskell. This means that users aren't limited to a small set of pre-programmed layouts and actions: anything can be programmed into the configuration.
It's simple to modify basic settings, and the example config has lots of comments to get you started. Haskell keeps this code clean, concise, and readable, and its type system keeps you safe from any serious mistakes. This makes it fast and light, even on very small and slow systems.
Pro Very stable
Use of Haskell, in conjunction with smart programming practices, guarantees a crash-free experience.
Pro Edit configuration and reload on-the-fly
Configuration is compiled into the WM, and it can be changed/updated on-the-fly, without requiring a full reload.
Pro Great availability of libraries
The use of Haskell as an extension language means that popular pieces of functionality are easily shared and widely available as Haskell Libraries. Many default layouts, and tools for quickly and easily building your own, are available through XMonad-contrib, and highly re-usable configurations are commonly shared through blog articles and the Xmonad Wiki. The documentation in XMonad-contrib is very clear and easy to read.
Pro Absolutely minimal
The entire window manager is extremely small, and includes nothing beyond basic window manipulation and tiling. Out of the box, there are no window decorations, status bar nor icon dock; just clean lines and efficiency.
Pro Intuitive model which separates "screens" and "workspaces"
XMonad separates screens and workspaces. A screen "projects" a workspace. You can put a window to a specific screen, regardless of which workspace is currently projected onto that screen. This is more intuitive than other WMs e.g. i3, which only has the notion of workspace but not "screen" and requires you to remember workspace numbering. It is especially beneficial for multi-monitor setups.
Cons
Con Requires knowledge of Haskell for configuration
Understanding of Haskell is required in order to configure XMonad.
Con Requires a lot of Haskell dependencies
XMonad depends on GHC (the Glasgow Haskell Compiler) which can take up about 700 MB or disk space.