module Pandora.Pattern.Object.Semilattice (Infimum (..), Supremum (..), Semilattice) where {- | > When providing a new instance, you should ensure it satisfies the three laws: > * Associativity: x /\ (y /\ z) ≡ (x /\ y) /\ z > * Commutativity: x /\ y ≡ y /\ x > * Idempotency: x /\ x ≡ x -} class Infimum a where {-# MINIMAL (/\) #-} (/\) :: a -> a -> a {- | > When providing a new instance, you should ensure it satisfies the three laws: > * Associativity: x \/ (y \/ z) ≡ (x \/ y) \/ z > * Commutativity: x \/ y ≡ y \/ x > * Idempotency: x \/ x ≡ x -} class Supremum a where {-# MINIMAL (\/) #-} (\/) :: a -> a -> a type family Semilattice constraint where Semilattice Infimum = () Semilattice Supremum = ()