Test-driven solutions to the chapter exercises in Real World Haskell.
Use QuickCheck to generate random input data over the domain
of pure functions, validate properties of functions with this
data, and validate properties of relations between functions.
Use HUnit for impure functions.