module Control.Object.Semigroup (Semigroup (..)) where

{- |
> When providing a new instance, you should ensure it satisfies the one law:
> * Associativity: x <> (y <> z) = (x <> y) <> z
-}

class Semigroup a where
        {-# MINIMAL (<>) #-}
        -- | Infix version of 'binop'
        (<>) :: a -> a -> a

        -- | Prefix version of '<>'
        binop :: a -> a -> a
        binop = (<>)