about summary refs log tree commit diff
path: root/docs/designs
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2021-01-23T16·23+0100
committerProfpatsch <mail@profpatsch.de>2021-01-30T15·41+0000
commite4a7704583812786d90ddc1f3aa639b2866e18e2 (patch)
tree47f47254f7b198813e151a71410864f50e91e919 /docs/designs
parent5da7ee9e8a7e3e790963b52f6427027a8823d75a (diff)
feat(nix): add nix.tag, a way of discriminating via tagged unions r/2166
Introduces the concept of a “tag”, a single-keyed attrset which
annotates a nix value with a name.
This can be used to implement tagged unions (by implying the list of
possible tags is well-known), which has some overlap with how
`nix.yants` does it.

However, the more fascinating use-case is in concert with a
so-called discriminator, `match` and hylomorphisms.

The discriminator can take a nix value, and add tags to it based on
some predicate.
With `match`, we can then use that information to convert the
discriminated values again.
With `hylo`, we can combine both the “constructive” discriminator step
with the “destructive” match step to recursively walk over a nix data
structure (based on a description of how to recurse, e.g. through attrset
values or list values), and then apply a transformation in one go.

Change-Id: Ia335ca8b0881447fbbcb6bcd80f49feb835f1715
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2434
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'docs/designs')
0 files changed, 0 insertions, 0 deletions