{-# LANGUAGE MultiParamTypeClasses #-}
module Data.GenRelativeValidity
    ( module Data.RelativeValidity
    , module Data.GenRelativeValidity
    ) where

import           Data.RelativeValidity
import           Data.GenValidity

import           Test.QuickCheck

class (GenValidity a, RelativeValidity a b) => GenRelativeValidity a b where
    genUncheckedFor :: b -> Gen a
    genUncheckedFor _ = genUnchecked

    genValidFor :: b -> Gen a
    genValidFor b = genValid `suchThat` (`isValidFor` b)

    genInvalidFor :: b -> Gen a
    genInvalidFor b = genUncheckedFor b `suchThat` (not . (`isValidFor` b))