Concept map
How the pieces fit together.
The three axes
hylic is built on three orthogonal axes. Each can be chosen independently:
Operations define the computation. Domain determines boxing overhead. Executor determines traversal strategy. Any combination works (subject to domain compatibility).
Type landscape
How a user navigates
The prelude defaults to the Shared domain — fold(…) /
treeish(…) / FUSED resolve to the Shared constructors. For
Local or Owned, take the per-domain path; see
Import patterns.
Domain compatibility matrix
| Shared | Local | Owned | |
|---|---|---|---|
| Fused | yes | yes | yes |
| Funnel | yes | — | — |
| Explainer | yes | yes | — |
| Pipeline (Stage 1 + 2) | yes | yes | — |
| OwnedPipeline | — | — | yes |
Fused supports all domains (borrows, never clones). Funnel requires
N: Clone + Send, R: Send, G: Send + Sync — the Shared domain
provides these. The Stage-1/Stage-2 pipeline surface is mirrored
across Shared and Local (SeedSugarsShared / SeedSugarsLocal,
Stage2SugarsShared / Stage2SugarsLocal, …); the Owned domain
gets the dedicated one-shot OwnedPipeline instead, since its
closures consume on first use and cannot back a Clone-able
chain.
Zero-boxing path
For maximum performance, skip the domain system entirely.
Implement FoldOps and TreeOps on concrete structs — the
compiler monomorphises every call, eliminating the dyn Fn
indirections. See
Zero-cost performance
for the worked walkthrough.