-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Commutative semigroups -- -- A commutative semigroup is a semigroup where the order of arguments to -- mappend does not matter. @package commutative-semigroups @version 0.2 module Numeric.Product.Commutative -- | Subclass of Num where (*) is commutative. -- -- Num doesn't demand commutative (*), and there are -- reasonable "real-world" instances with non-commutative multiplication. -- There is also no canonical subclass in base that would -- suffice, as both Integral and Floating imply commutative -- (*) for different reasons. -- -- Two examples of non-commutative (*): -- --
-- a <> b == b <> a --class Semigroup g => Commutative g instance Data.Semigroup.Commutative.Commutative () instance Data.Semigroup.Commutative.Commutative Data.Semigroup.Internal.All instance Data.Semigroup.Commutative.Commutative Data.Semigroup.Internal.Any instance Data.Semigroup.Commutative.Commutative GHC.Base.Void instance GHC.Classes.Ord a => Data.Semigroup.Commutative.Commutative (Data.Semigroup.Max a) instance GHC.Classes.Ord a => Data.Semigroup.Commutative.Commutative (Data.Semigroup.Min a) instance (Data.Semigroup.Commutative.Commutative a, GHC.Base.Monoid a) => Data.Semigroup.Commutative.Commutative (Data.Semigroup.WrappedMonoid a) instance Data.Semigroup.Commutative.Commutative a => Data.Semigroup.Commutative.Commutative (GHC.Maybe.Maybe a) instance GHC.Num.Num a => Data.Semigroup.Commutative.Commutative (Data.Semigroup.Internal.Sum a) instance Numeric.Product.Commutative.CommutativeProduct a => Data.Semigroup.Commutative.Commutative (Data.Semigroup.Internal.Product a) instance Data.Semigroup.Commutative.Commutative a => Data.Semigroup.Commutative.Commutative (Data.Semigroup.Internal.Dual a) instance Data.Semigroup.Commutative.Commutative b => Data.Semigroup.Commutative.Commutative (a -> b) instance (Data.Semigroup.Commutative.Commutative a, Data.Semigroup.Commutative.Commutative b) => Data.Semigroup.Commutative.Commutative (a, b) instance (Data.Semigroup.Commutative.Commutative a, Data.Semigroup.Commutative.Commutative b, Data.Semigroup.Commutative.Commutative c) => Data.Semigroup.Commutative.Commutative (a, b, c) instance (Data.Semigroup.Commutative.Commutative a, Data.Semigroup.Commutative.Commutative b, Data.Semigroup.Commutative.Commutative c, Data.Semigroup.Commutative.Commutative d) => Data.Semigroup.Commutative.Commutative (a, b, c, d) instance (Data.Semigroup.Commutative.Commutative a, Data.Semigroup.Commutative.Commutative b, Data.Semigroup.Commutative.Commutative c, Data.Semigroup.Commutative.Commutative d, Data.Semigroup.Commutative.Commutative e) => Data.Semigroup.Commutative.Commutative (a, b, c, d, e) instance GHC.Classes.Ord a => Data.Semigroup.Commutative.Commutative (Data.Set.Internal.Set a) instance Data.Semigroup.Commutative.Commutative Data.IntSet.Internal.IntSet instance Data.Semigroup.Commutative.Commutative a => Data.Semigroup.Commutative.Commutative (Data.Ord.Down a) instance Data.Semigroup.Commutative.Commutative (Data.Proxy.Proxy x) instance Data.Semigroup.Commutative.Commutative a => Data.Semigroup.Commutative.Commutative (Data.Functor.Const.Const a x) instance Data.Semigroup.Commutative.Commutative a => Data.Semigroup.Commutative.Commutative (Data.Functor.Identity.Identity a) instance (Data.Semigroup.Commutative.Commutative (f a), Data.Semigroup.Commutative.Commutative (g a)) => Data.Semigroup.Commutative.Commutative ((GHC.Generics.:*:) f g a) instance Data.Semigroup.Commutative.Commutative (f (g a)) => Data.Semigroup.Commutative.Commutative ((GHC.Generics.:.:) f g a) instance Data.Semigroup.Commutative.Commutative a => Data.Semigroup.Commutative.Commutative (Data.Functor.Contravariant.Op a b)