module Control.Object.Semiring (Semiring (..)) where import Control.Object.Semigroup (Semigroup) {- | > When providing a new instance, you should ensure it satisfies the two laws: > * Commutativity: a >< b = b >< a > * Distributivity: x <> (y >< z) = x <> y >< x <> z -} class Semigroup a => Semiring a where {-# MINIMAL (><) #-} (><) :: a -> a -> a