A commutative semigroup is a semigroup where the order of arguments to mappend does not matter.
class Semigroup g => Commutative g
Changes
Revision history for commutative-semigroups
0.1.0.0 – 2022-06-12
Commutative (Product a) now requires CommutativeProduct a.
CommutativeProduct is a new class to indicate (*) from Num is
commutative, which is not required by Num. (Example:
multiplication on
quaternions is
non-commutative, and the Quaternion a type from the linear
package has a valid instance RealFloat a => Num (Quaternion a).)
Remark: There is also no canonical subclass class in the Num
hierarchy which implies commutative (*), as both Integral and
Floating instances work here:
Integral instances are customarily Euclidean Domains, which are
commutative rings with extra conditions.
Floating instances customarily expect (+), (*), and exp to
form an exponential field, which is also a commutative ring with
extra conditions.