Crosscut

Daily Thought - 2025-03-22

Hey, I'm Hanno! These are my daily thoughts on Crosscut, the programming language I'm creating. If you have any questions, comments, or feedback, please get in touch!

Let's take a closer look at the automatic application of functions to variant types. If we have a fallible function f: A -> variant { B, Error }, and we follow it up with another function g: B -> C. The compiler could automatically wrap g in another function it creates, g': variant { B, Error } -> variant { C, Error }.

If the variant happens to be B, this new function g' would just apply g and wrap its result in another variant. If the variant is Error, g' would return that unchanged. This is basically railway-oriented programming, but built into the language.

This whole concept is not new. I believe what I did above, turning g into g' would be called "lifting". But all the examples I could find in the wild either do this explicitly, or as part of a special notation. Maybe I'm missing something. But at least right now, I can't think of a reason why automatic lifting wouldn't work.

Hey, you! Want to subscribe to my daily thoughts? Just let me know (maybe include a nice message, if you're up for it), and I'll send you an email every time I post a new one.