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;
}