Or maybe Haskell is also a hybrid? I know about the type theoretic accounting tricks used to stay pure, but when I really need unboxed mutable arrays and several tight loops, I just use the ST monad and write code that is psychologically completely imperative. And it compiles to pretty fast executables too, especially using the LLVM backend.
Yeah, that's what I meant.
You can't tell from the type signature alone if a pure function uses ST though, so I'd say that counts as pure :)