packages feed

atp-0.1.0.0: test/Property/Modifiers/Simplified.hs

{-# LANGUAGE DeriveTraversable #-}

{-|
Module       : Property.Modifiers.Simplified
Description  : QuickCheck generators of simplified first-order expressions.
Copyright    : (c) Evgenii Kotelnikov, 2019-2021
License      : GPL-3
Maintainer   : evgeny.kotelnikov@gmail.com
Stability    : experimental
-}

module Property.Modifiers.Simplified (
  Simplified(..)
) where

import Test.QuickCheck (Arbitrary(..))

import Property.Generators ()

import ATP.FOL


newtype Simplified a = Simplified { getSimplified :: a }
  deriving (Show, Eq, Ord, Functor, Foldable, Traversable)

instance (Simplify e, Arbitrary e) => Arbitrary (Simplified e) where
  arbitrary = Simplified . simplify <$> arbitrary
  shrink = traverse (fmap simplify . shrink)