class (Monoid m, Commutative m, Reductive m, LeftGCDMonoid m, RightGCDMonoid m, OverlappingGCDMonoid m) => GCDMonoid m whereClass of Abelian monoids that allow the greatest common divisor to be found for any two given values. The operations must satisfy the following laws:
gcd a b == commonPrefix a b == commonSuffix a b
Just a' = a </> p && Just b' = b </> p
where p = gcd a bIn addition, the gcd operation must satisfy the following properties:
Uniqueness
all isJust
[ a </> c
, b </> c
, c </> gcd a b
]
==>
(c == gcd a b)
Idempotence
gcd a a == a
Identity
gcd mempty a == mempty
gcd a mempty == mempty
Commutativity
gcd a b == gcd b a
Associativity
gcd (gcd a b) c == gcd a (gcd b c)
Methods
gcd :: m -> m -> m
Instances9GCDMonoid, …
GCDMonoid IntSetDefined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCDO(m+n)
GCDMonoid ()Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCDO(1)
Ord a => GCDMonoid (Set a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCDO(m*log(n/m + 1)), m <= n
GCDMonoid (Product Natural)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCDO(1)
GCDMonoid (Sum Natural)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCDO(1)
GCDMonoid a => GCDMonoid (Dual a)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCD(GCDMonoid a, GCDMonoid b) => GCDMonoid (a, b)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCD(GCDMonoid a, GCDMonoid b, GCDMonoid c) => GCDMonoid (a, b, c)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCD(GCDMonoid a, GCDMonoid b, GCDMonoid c, GCDMonoid d) => GCDMonoid (a, b, c, d)Defined in monoid-subclasses-1.2.5.1 · Data.Monoid.GCD