One of the many challenges when doing Test-Driven Development is to come up with good enough random input values, in such a way that the system under test (SUT) can be exercised every time through the same code path.
These random input values, which exercise the SUT every time through the same code path, belong to a category, or set, or class, named Equivalence Class, after the xUnit Test Patterns book terminology.
QuickCheck provides a DSL, through its various combinators, that allows you to create and consume such Equivalence Classes.
QuickCheck also provides a sophisticated mechanism for executing test cases multiple times, and doing analytics through the concepts of classifying and shrinking, when reporting back the test results.
QuickCheck was created by Koen Claessen and John Hughes. FsCheck was created by Kurt Schelfthout as a port of QuickCheck.