# `acme-zero` and `acme-one` [Cabal][cabal] package dependencies form a commutative monoid with an absorbing element. They satisfy the following axioms: [cabal]: https://www.haskell.org/cabal/users-guide/developing-packages.html * **Associativity** For all dependencies `a`, `b` and `c`, ``` (a , b) , c = a , (b , c) ``` In fact, the Cabal syntax does not even allow you to use the parentheses for this reason. * **Commutativity** For all dependencies `a` and `b`, ``` a , b = b , a ``` * **Identity element** For all dependencies `a`, ``` acme-one , a = a a , acme-one = a ``` Depending on [`acme-one`][acme-one] has no additional effect. * **Absorbing element** For all dependencies `a`, ``` acme-zero , a = acme-zero a , acme-zero = acme-zero ``` Depending on [`acme-zero`][acme-zero] in addition has the same effect as *only* depending on `acme-zero`. [acme-one]: https://hackage.haskell.org/package/acme-one [acme-zero]: https://hackage.haskell.org/package/acme-zero