module Test.QuickCheck.Instances.Num (nonNegative,nonPositive ,negative,positive ,nonZero,nonZero_ ) where import Test.QuickCheck import Control.Monad.Extensions import Control.Applicative nonNegative :: (Num a, Arbitrary a) => Gen a nonNegative = abs <$> arbitrary positive :: (Eq a, Num a, Arbitrary a) => Gen a positive = nonZero nonNegative nonPositive :: (Num a, Arbitrary a) => Gen a nonPositive = negate <$> nonNegative negative :: (Eq a, Num a, Arbitrary a) => Gen a negative = negate <$> positive nonZero :: (Eq a, Num a, Arbitrary a) => Gen a -> Gen a nonZero g = sized (\s -> satisfiesM (/= 0) (if (s == 0) then (resize 1 g) else g)) nonZero_ :: (Eq a, Num a, Arbitrary a) => Gen a nonZero_ = nonZero arbitrary