{-# LANGUAGE MultiParamTypeClasses #-} module Data.GenRelativeValidity ( module Data.RelativeValidity , module Data.GenRelativeValidity ) where import Data.GenValidity import Data.RelativeValidity import Test.QuickCheck class (GenUnchecked a, RelativeValidity a b) => GenRelativeUnchecked a b where genUncheckedFor :: b -> Gen a genUncheckedFor _ = Gen a forall a. GenUnchecked a => Gen a genUnchecked class (GenValid a, RelativeValidity a b) => GenRelativeValid a b where genValidFor :: b -> Gen a genValidFor b :: b b = Gen a forall a. GenValid a => Gen a genValid Gen a -> (a -> Bool) -> Gen a forall a. Gen a -> (a -> Bool) -> Gen a `suchThat` (a -> b -> Bool forall a b. RelativeValidity a b => a -> b -> Bool `isValidFor` b b) class (GenUnchecked a, RelativeValidity a b, GenRelativeUnchecked a b) => GenRelativeInvalid a b where genInvalidFor :: b -> Gen a genInvalidFor b :: b b = b -> Gen a forall a b. GenRelativeUnchecked a b => b -> Gen a genUncheckedFor b b Gen a -> (a -> Bool) -> Gen a forall a. Gen a -> (a -> Bool) -> Gen a `suchThat` (Bool -> Bool not (Bool -> Bool) -> (a -> Bool) -> a -> Bool forall b c a. (b -> c) -> (a -> b) -> a -> c . (a -> b -> Bool forall a b. RelativeValidity a b => a -> b -> Bool `isValidFor` b b))