As I say, I'm not a Haskell expert, so feel free to provide a better implementation.
... Did you really read the Haskell code ? You're comparing two completely unrelated algorithms, talk about afair comparison !