[][src]Crate pergola

This is a small crate that provides a generic unital-join-semilattice type

  • (hereafter: "lattice") along with a few common instances.
  • Lattices are defined in two separate pieces: a definition trait
  • LatticeDef that provides the type-and-functions for a given lattice and a
  • user interface struct LatticeElt that's parameterized by a LatticeDef
  • and provides convenient methods to work with (including impls of standard
  • Rust operator traits).
  • This unusual split exists because many types have multiple equally viable
  • lattices you can build on them (eg. u32-with-min or u32-with-max) and we want
  • to avoid both coupling any given lattice definition to the type or
  • accidentally inheriting an impl for any of the type's "standard semantics" as
  • the lattice semantics, eg. we don't want to inherit u32's standard partial
  • order as any lattice's partial order, unless explicitly building such a
  • lattice.

Structs

LatticeElt

Write code that uses lattices over this type, and it will delegate to the functions of the parameter LatticeDef.

Traits

LatticeDef

Implement this trait on a (typically vacuous) type to define a specific lattice as a type-with-some-choice-of-operators.