packages feed

semilattices 0.0.0.1 → 0.0.0.2

raw patch · 7 files changed

+15/−2 lines, 7 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Semilattice.Join: instance Data.Semilattice.Join.Join a => Data.Semigroup.Semigroup (Data.Semilattice.Join.Joining a)
- Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower (Data.Monoid.Endo a)
- Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower Data.Monoid.All
- Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower Data.Monoid.Any
- Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower a => Data.Semilattice.Lower.Lower (Data.Monoid.Dual a)
- Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower a => Data.Semilattice.Lower.Lower (Data.Monoid.Product a)
- Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower a => Data.Semilattice.Lower.Lower (Data.Monoid.Sum a)
- Data.Semilattice.Lower: instance forall k (a :: k) (b :: k). a ~ b => Data.Semilattice.Lower.Lower (a Data.Type.Equality.:~: b)
- Data.Semilattice.Lower: instance forall k2 k1 (a :: k1) (b :: k2). (a :: k1) ~~ (b :: k2) => Data.Semilattice.Lower.Lower (a Data.Type.Equality.:~~: b)
- Data.Semilattice.Meet: instance Data.Semilattice.Meet.Meet a => Data.Semigroup.Semigroup (Data.Semilattice.Meet.Meeting a)
- Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper Data.Monoid.All
- Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper Data.Monoid.Any
- Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper a => Data.Semilattice.Upper.Upper (Data.Monoid.Dual a)
- Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper a => Data.Semilattice.Upper.Upper (Data.Monoid.Product a)
- Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper a => Data.Semilattice.Upper.Upper (Data.Monoid.Sum a)
- Data.Semilattice.Upper: instance forall k (a :: k) (b :: k). a ~ b => Data.Semilattice.Upper.Upper (a Data.Type.Equality.:~: b)
- Data.Semilattice.Upper: instance forall k2 k1 (a :: k1) (b :: k2). (a :: k1) ~~ (b :: k2) => Data.Semilattice.Upper.Upper (a Data.Type.Equality.:~~: b)
+ Data.Semilattice.Join: instance Data.Semilattice.Join.Join a => GHC.Base.Semigroup (Data.Semilattice.Join.Joining a)
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower (Data.Semigroup.Internal.Endo a)
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower (Data.Sequence.Internal.Seq a)
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower Data.Semigroup.Internal.All
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower Data.Semigroup.Internal.Any
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower a => Data.Semilattice.Lower.Lower (Data.Semigroup.Internal.Dual a)
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower a => Data.Semilattice.Lower.Lower (Data.Semigroup.Internal.Product a)
+ Data.Semilattice.Lower: instance Data.Semilattice.Lower.Lower a => Data.Semilattice.Lower.Lower (Data.Semigroup.Internal.Sum a)
+ Data.Semilattice.Lower: instance forall k (a :: k) (b :: k). (a ~ b) => Data.Semilattice.Lower.Lower (a Data.Type.Equality.:~: b)
+ Data.Semilattice.Lower: instance forall k2 k1 (a :: k1) (b :: k2). ((a :: k1) ~~ (b :: k2)) => Data.Semilattice.Lower.Lower (a Data.Type.Equality.:~~: b)
+ Data.Semilattice.Meet: instance Data.Semilattice.Meet.Meet a => GHC.Base.Semigroup (Data.Semilattice.Meet.Meeting a)
+ Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper Data.Semigroup.Internal.All
+ Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper Data.Semigroup.Internal.Any
+ Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper a => Data.Semilattice.Upper.Upper (Data.Semigroup.Internal.Dual a)
+ Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper a => Data.Semilattice.Upper.Upper (Data.Semigroup.Internal.Product a)
+ Data.Semilattice.Upper: instance Data.Semilattice.Upper.Upper a => Data.Semilattice.Upper.Upper (Data.Semigroup.Internal.Sum a)
+ Data.Semilattice.Upper: instance forall k (a :: k) (b :: k). (a ~ b) => Data.Semilattice.Upper.Upper (a Data.Type.Equality.:~: b)
+ Data.Semilattice.Upper: instance forall k2 k1 (a :: k1) (b :: k2). ((a :: k1) ~~ (b :: k2)) => Data.Semilattice.Upper.Upper (a Data.Type.Equality.:~~: b)

Files

ChangeLog.md view
@@ -1,3 +1,7 @@+# 0.0.0.2++Add a `Lower` instance for `Data.Sequence.Seq`.+ # 0.0.0.1  Add `Lower` instances for some `Data.Monoid` types.
README.md view
@@ -8,3 +8,8 @@ Semilattices are idempotent commutative semigroups, and come in two flavours: `Join` and `Meet`. This presentation of them doesn’t inherit from `Semigroup` however, since `Semigroup`s already exist and the relationships between the various classes here warrant their own operators.  Join semilattices can be combined using the `\/` operator (pronounced “lub,” for “least upper bound”). Meet semilattices can be combined with the `/\` operator (pronounced “glb,” for “greatest lower bound”). They have opposite relationships to `Lower` and `Upper` bounds (which are optional; in general, there are more lower bounds than upper ones).+++## Related work++- [`lattices`](http://hackage.haskell.org/package/lattices) also offers join & meet semilattices, & their respective bounds. Relative to `lattices`, `semilattices` primarily offers a different class hierarchy, e.g. `Lower` & `Upper` do not have `Join` & `Meet` as superclasses. Relative to `semilattices`, `lattices` offers classes for lattices (both bounded and un-), partial orderings, a variety of operations for instances.
semilattices.cabal view
@@ -1,5 +1,5 @@ name:                semilattices-version:             0.0.0.1+version:             0.0.0.2 synopsis:            Semilattices description:         Join- and meet-semilattices, with optional upper and lower bounds, and a variety of instances for each. homepage:            https://github.com/robrix/semilattices
src/Data/Semilattice/Join.hs view
@@ -317,6 +317,7 @@ newtype LessThan a = LessThan { getLessThan :: a }   deriving (Enum, Eq, Foldable, Functor, Join, Num, Read, Show, Traversable) +-- | NB: This is not in general a total ordering. instance (Eq a, Join a) => Ord (LessThan a) where   compare a b     | a == b      = EQ
src/Data/Semilattice/Lower.hs view
@@ -15,6 +15,7 @@ import Data.Monoid as Monoid import Data.Proxy import Data.Semigroup as Semigroup+import Data.Sequence as Seq import Data.Set as Set import Data.Type.Coercion import Data.Type.Equality@@ -215,6 +216,7 @@ instance Lower (IntMap a) where lowerBound = IntMap.empty instance Lower IntSet where lowerBound = IntSet.empty instance Lower (Map k a) where lowerBound = Map.empty+instance Lower (Seq a) where lowerBound = Seq.empty instance Lower (Set a) where lowerBound = Set.empty  -- unordered-containers
src/Data/Semilattice/Meet.hs view
@@ -317,6 +317,7 @@ newtype GreaterThan a = GreaterThan { getGreaterThan :: a }   deriving (Enum, Eq, Foldable, Functor, Meet, Num, Read, Show, Traversable) +-- | NB: This is not in general a total ordering. instance (Eq a, Meet a) => Ord (GreaterThan a) where   compare a b     | a == b      = EQ
src/Data/Semilattice/Upper.hs view
@@ -31,7 +31,7 @@ --   If @s@ is a 'Meet' semilattice, 'upperBound' must be the identity of '/\': -- -- @--- 'upperBound' '\/' a = a+-- 'upperBound' '/\' a = a -- @ -- --   If @s@ is a 'Join' semilattice, 'upperBound' must be the absorbing element of '\/':