Daily Note - 2025-03-29
Hey, I'm Hanno! These are my daily notes on Crosscut, the programming language I'm creating. If you have any questions, comments, or feedback, please get in touch!
There's one last aspect to normalizing variant types (in addition to
sorting and deduplication), that we'll
probably need in the language: flattening of nested variants. That would mean
that variant { A, variant { B, C } }
would become variant { A, B, C }
.
Assume we have a function A -> variant { B, NetworkError }
, and follow that up
with another function B -> variant { C, FileNotFound }
. Due to
automatic lifting, that would result in a
variant { variant { C, FileNotFound }, NetworkError }
, which seems
unnecessarily complex. And consider, chaining more functions could make that
much worse.
I think the problem becomes more pronounced, if both functions return the same
error, for example resulting in
variant { variant { C, FileNotFound }, FileNotFound }
. What even is that? If
we flatten it to variant { C, FileNotFound, FileNotFound }
, we can then
deduplicate, resulting in variant { C, FileNotFound }
. Much more reasonable!