module Data.Magma where

-- (<<) has the < https://en.wikipedia.org/wiki/Latin_square_property >.
{-

https://en.wikipedia.org/wiki/Magma_(algebra)
https://en.wikipedia.org/wiki/Alternativity
https://en.wikipedia.org/wiki/Power_associativity
https://en.wikipedia.org/wiki/Medial_magma
https://en.wikipedia.org/wiki/Unipotent
-}


infixl 6 <<

-- When /a/ is a 'Group' we must have:
-- @ x '<<' y = x '<>' 'inv' y @
class Magma a where
  (<<) :: a -> a -> a

--instance Magma a => Magma (Maybe a)