Static types do provide some guarantees as they rule out an entire class of runtime errors. In case of XMonad, since Haskell's type system is more expressive, the class of runtime errors ruled out at compile-time is broader.