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