>the entire discussion on QuickCheck is hard to really make sense of and arbitrary is a famously good use of type classes
I found it understandable but for me the issue was: all the problems that author pointed out are true but you're not forced to make an instance of Arbitrary. I rarely do in my tests. But some times it really does make sense and in those cases it's nice to have.