packages feed

proarrow-0.1.0.0: lattice.dot

digraph optics {
  rankdir=TB; node [shape=box, style=rounded, fontname="Helvetica"]; edge [dir=none];
  // Edges run weakest-to-strongest, mirroring the flavor classes' superclass structure.
  // Dotted nodes are one-sided: their methods never mention the second witness, so its category
  // may differ from the first's. Dashed nodes are indexed by a monad, so Iso has no edge to them.
  node [style="rounded,dotted"]; Fold; AffineFold; Getter; Review;
  node [style="rounded,dashed"];
  AlgebraicLens [label="AlgebraicLens m"];
  ClassifyingLens [label="ClassifyingLens l"];
  node [style=rounded];
  { rank=same; Fold; Setter; }

  Fold -> AffineFold; Fold -> Traversal;
  Setter -> Traversal; Setter -> Cotraversal; Setter -> Tracer; Setter -> Glass;

  AffineFold -> Getter; AffineFold -> AffineTraversal;
  Traversal -> AffineTraversal; Traversal -> MonoidalTraversal;
  Cotraversal -> Kaleidoscope;
  Kaleidoscope -> Grate;

  Glass -> Lens; Glass -> Grate; Glass -> MonoidalLens;
  Getter -> Lens; Getter -> MonoidalLens;
  AffineTraversal -> Lens; AffineTraversal -> Prism; AffineTraversal -> MonoidalLens;
  MonoidalTraversal -> MonoidalLens; MonoidalTraversal -> Prism; MonoidalTraversal -> PowerGrate;
  Review -> Prism;
  Grate -> PowerGrate;

  MonoidalLens -> AlgebraicLens;
  AlgebraicLens -> ClassifyingLens; Kaleidoscope -> ClassifyingLens;

  Lens -> Iso; MonoidalLens -> Iso; Prism -> Iso; PowerGrate -> Iso; Tracer -> Iso;
}