module Algebra.Structures.IntegralDomain
( module Algebra.Structures.CommutativeRing
, IntegralDomain
, propIntegralDomain
) where
import Test.QuickCheck
import Algebra.Structures.Ring
import Algebra.Structures.CommutativeRing
class CommutativeRing a => IntegralDomain a
propZeroDivisors :: (IntegralDomain a, Eq a) => a -> a -> Bool
propZeroDivisors a b = if a <*> b == zero then a == zero || b == zero else True
propIntegralDomain :: (IntegralDomain a, Eq a) => a -> a -> a -> Property
propIntegralDomain a b c = if propZeroDivisors a b
then propCommutativeRing a b c
else whenFail (print "propZeroDivisors") False