This is why I like Clojure's pragmatic approach. FP doesn't solve every problem easily, but often your core challenge is handling state transitions. Clojure attacks mutable state better than most languages out there, lets you get functional when you want to, but still allows for reasonably easy imperative code for things like Java interop.