module Test.QuickCheck.Instances.Eq (notEqualTo, notOneof) where

import Test.QuickCheck
import Test.QuickCheck.Checkers
import Control.Monad.Extensions

notEqualTo :: (Eq a) => a -> Gen a -> Gen a
notEqualTo :: a -> Gen a -> Gen a
notEqualTo a
v = (a -> Bool) -> Gen a -> Gen a
forall (m :: * -> *) a. Monad m => (a -> Bool) -> m a -> m a
satisfiesM (a -> a -> Bool
forall a. Eq a => a -> a -> Bool
/= a
v)

notOneof :: (Eq a,Arbitrary a) => [a] -> Gen a
notOneof :: [a] -> Gen a
notOneof [a]
es = (a -> Bool) -> Gen a
forall a. Arbitrary a => (a -> Bool) -> Gen a
arbitrarySatisfying (Bool -> Bool
not (Bool -> Bool) -> (a -> Bool) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [a]
es))