module Pandora.Pattern.Object.Ringoid (Ringoid (..)) where

import Pandora.Pattern.Object.Semigroup (Semigroup)

{- |
> When providing a new instance, you should ensure it satisfies the two laws:
> * Left distributivity: x <> (y >< z) ≡ x <> y >< x <> z
> * Right distributivity: (y >< z) <> x ≡ y <> x >< z <> x
-}

class Semigroup a => Ringoid a where
        {-# MINIMAL (><) #-}
        (><) :: a -> a -> a