Îõ³h*yL5      !"#$%&'()*+,-./012340.2 Safe-Inferredcommutative-semigroups Subclass of 5 where 6 is commutative.5 doesn't demand commutative 6€, and there are reasonable "real-world" instances with non-commutative multiplication. There is also no canonical subclass in base that would suffice, as both 7 and 8 imply commutative 6 for different reasons. Two examples of non-commutative 6:Linear.Quaternion.Quaterion from the linear package has a 5> instance, and quaternion multiplication is noncommutative.Data.Matrix.Matrix from the matrix package uses 6† for matrix multiplication, which is also non-commutative (on square matrices, which is the only time the question makes sense). Safe-InferredÚÛF commutative-semigroupsA  semigroup is a 9 that follows the rule: a <> b == b <> acommutative-semigroups1Product of commutative semigroups, Functor style.commutative-semigroups:< lifts commutative semigroups pointwise (at only one point). commutative-semigroups;- lifts commutative semigroups into a functor.!commutative-semigroups-Trivial commutative semigroup, Functor style.#commutative-semigroups$commutative-semigroups(commutative-semigroupsæProduct commutative semigroup. A Pair of commutative semigroups gives rise to a commutative semigroup)commutative-semigroups0Functions lift commutative semigroups pointwise.-commutative-semigroups4commutative-semigroupsTrivial commutative semigroup.<      !"#$%&'()*+,-./0123456789:;9:<9=>9?@9AB9CD9EFÇ1commutative-semigroups-0.2-HiHbalKBxSYAdoZBfXfS9tNumeric.Product.CommutativeData.Semigroup.Commutativecommutative-semigroupsCommutativeProduct$fCommutativeProductAlt$fCommutativeProductOp$fCommutativeProductDown$fCommutativeProductConst$fCommutativeProductProduct$fCommutativeProductMax$fCommutativeProductMin$fCommutativeProductFixed$fCommutativeProductRatio$fCommutativeProductSum$fCommutativeProductIdentity$fCommutativeProductComplex$fCommutativeProductDouble$fCommutativeProductFloat$fCommutativeProductNatural$fCommutativeProductWord$fCommutativeProductWord64$fCommutativeProductWord32$fCommutativeProductWord16$fCommutativeProductWord8$fCommutativeProductInteger$fCommutativeProductInt$fCommutativeProductInt64$fCommutativeProductInt32$fCommutativeProductInt16$fCommutativeProductInt8 Commutative$fCommutativeOp$fCommutative:.:$fCommutative:*:$fCommutativeIdentity$fCommutativeConst$fCommutativeProxy$fCommutativeDown$fCommutativeIntSet$fCommutativeSet$fCommutative(,,,,)$fCommutative(,,,)$fCommutative(,,)$fCommutative(,)$fCommutativeFUN$fCommutativeDual$fCommutativeProduct$fCommutativeSum$fCommutativeMaybe$fCommutativeWrappedMonoid$fCommutativeMin$fCommutativeMax$fCommutativeVoid$fCommutativeAny$fCommutativeAll$fCommutative()baseGHC.NumNum*GHC.RealIntegral GHC.FloatFloatingGHC.Base SemigroupData.Functor.IdentityIdentityData.Functor.ConstConst