I'm a big fan of hybrid functionals. I think being able to fall back to somewhat imperative code makes sense on occasion. Some things are better expressed in either paradigm, and that's OK.
You can't tell from the type signature alone if a pure function uses ST though, so I'd say that counts as pure :)