Lively typed tables in Hazel / Oct 2026
Most data analysis happens in dynamic languages like Python, R, MATLAB, and Julia using computational notebook interfaces like Jupyter and R Studio.
These are flexible systems, but dynamic checking leaves critical information about table schemas, i.e. a table's column names and corresponding types, completely latent in the operations that are performed.
Knowing the schema of a table generated during a calculation is useful for several reasons. It allows your editor (even when used by an AI) to provide more accurate autocomplete and error localization, often before you waste your time running an expensive but incorrect computation.
Making schemas explicit, e.g. at function and module boundaries, is also critical to
interoperability and reuse, key concerns as scientific
work scales up to planetary scale (see our
Shifting to a statically typed approach could help matters, with table schemas tracked as types. However, there is a major problem with statically typed systems for working with tables: they struggle with data-dependent operations where the schema of a function's output depends on the values in its input.
For example, unstacking a long table into a wide one like in the example below produces a table whose column names and types depend on the values (here, in the "element" column) of the input! No ordinary static type checker can encode the type of this kind of operation precisely.
