
I should say that this reimplementation would be good. If you can compare two implementations (one in plain Haskell and second in declarative QuickCheck rules) you will be better that with only one.
This presumes I know how to write a simple but slow version. Clearly, that's an excellent situation, since you can trust your simple but slow version more than the complex but fast one. Unfortunately, I'm usually hard enough pressed to write just the slow version. If I could think of a simpler way to write it I'd be really set, but I'm already writing things in the simplest possible way I know how.
Doing two implementation for testing purposes can be boldly likened to code review with only one person.
Indeed, but unfortunately it still all comes from the same brain. So if it's too low level, I'll make the same wrong assumptions about the input. If it's too high level, then writing a whole new program is too much work. I think you make a good point, but one that's only applicable in certain situations.