packages feed

genvalidity-0.11.0.2: src/Data/GenRelativeValidity.hs

{-# 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 _ = genUnchecked

class
  (GenValid a, RelativeValidity a b) =>
  GenRelativeValid a b
  where
  genValidFor :: b -> Gen a
  genValidFor b = genValid `suchThat` (`isValidFor` b)

class
  (GenUnchecked a, RelativeValidity a b, GenRelativeUnchecked a b) =>
  GenRelativeInvalid a b
  where
  genInvalidFor :: b -> Gen a
  genInvalidFor b = genUncheckedFor b `suchThat` (not . (`isValidFor` b))