depend on QuickCheck