What's not built yet

Designed, not built

The gaps that remain, as of the latest build log step. Read this before assuming anything else in this manual.

Most of what earlier versions of this page listed (dictionaries, var and loops, variants and switch, imports, tuples, interpolation, pipes, tests, doc comments, floats, bytes) now exists and has its own page in the sidebar. What is still missing, or only partly there:

Sketched, with no parser support

Explicit type-parameter lists on a function, written <'a> in the binder position. Ordinary generic data types, ability-polymorphic binders (<'e>) and named type variables in annotations ((x: 'a): 'a) are built; a generic function is otherwise simply inferred.

Not designed at all yet

  • Handlers written as ordinary functions (handle e with handler), effect-variable types such as {g}, and operations that take a delayed computation or a generic function. Clay’s handle has inline clauses only.
  • Structural matching across unrelated record types, (a .modify helper is decided against: path assignment covers it).
  • A real map type behind dict (iteration with for (k, v) in d is built; the representation is still a sorted list).
  • Concurrency and networking primitives.

Built, but narrower than the design

  • Abilities: a declared-but-unused ability is refused (stricter than Unison).
  • Imports are per file and never stored; a directory tree derived from names is not built.
  • Constructors, ability operations and record fields cannot be renamed (the type’s own name can).
  • Storage: tested against a local S3 mock only; real AWS, R2 and B2 are untried. Planning a bring-in and opening a definition are lazy (request-count tested against the mock); a stored partial replica and pinning are not built.
  • Offline, nothing is verified by UCM: the Rust kernel’s checker and hasher decide, and the server (when present) cross-checks.

Also unsettled, even on paper

  • Whether Clay restricts comparison operators (<, >) to numeric types, or keeps Unison’s fully polymorphic comparisons.
  • The typing rule for a bare .key on a dict, as opposed to d["k"], which is built.

docs/open-issues.md in the repository is the full, ranked list.