@hackage quickcheck-combinators0.0.6

Simple type-level combinators for augmenting QuickCheck instances.

quickcheck-combinators

Simply wrap the type you want to generate (assuming it satisfies all the necessary constraints) to refine the terms generated:

{-# LANGUAGE DataKinds #-}

import Data.Set (Set)
import Test.QuickCheck
import Test.QuickCheck.Instances
import GHC.TypeLits

instance Arbitrary LinearEquation where
  arbitrary = do
    vars <- arbitrary :: Gen (AtLeast 3 Set String)
    -- ...