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 though the same code path.
These random input values, that exercise the SUT every time through the same code path, belong into 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 is created by Koen Claessen and John Hughes. FsCheck is created by Kurt Schelfthout as a port of QuickCheck.