i think pure functional programming is not a practical possibility. functional systems are functional until they are not (scheme's set!, clojure's transactions, ....) maybe the important thing is to keep in mind which parts of your system mutate data, and which parts do not.