crdt-0.2: lib/Data/Semilattice.hs
module Data.Semilattice
( Semilattice
, (<>)
) where
import Data.Semigroup (Semigroup)
import qualified Data.Semigroup as Semigroup
{- |
A semilattice.
It may be a join-semilattice, or meet-semilattice, it doesn't matter.
If it matters for you, use package @lattices@.
In addition to 'Semigroup', Semilattice defines this laws:
[commutativity]
@x '<>' y == y '<>' x@
[idempotency]
@x '<>' x == x@
-}
class Semigroup a => Semilattice a
-- | Just ('Semigroup.<>'), specialized to 'Semilattice'.
(<>) :: Semilattice a => a -> a -> a
(<>) = (Semigroup.<>)
infixr 6 <>
{-# INLINE (<>) #-}