Conversation

Oooops, accidentally spent most of the afternoon thinking about state machines instead of working on my talk. Think I'm onto something fun though (and probably should write in a longer fashion about it at some point).
2
11
Definitely not the first person to think of this. But if enums encapsulate state. And all state machines do is describe transitions between states, then if we could specialize on enum members in fn signatures then that would be enough to implement state machines concisely.
5
7
[usual disclaimer I'm not a lang designer, nor on any lang team -- take w/ salt] What I'm thinking is that both examples below are functionally equivalent. I suspect that if we could encode state transitions onto enums it would feel more natural -- e.g. lean into &mut self
Image
Image
4
16
Oh lol; the second example doesn't have enough information to track what it transitions into. The signature implies this is valid: if x { *self = Self::A } else { *self = Self::B } The point is that this can't happen. Either compiler should infer, or syntax is needed. Oops.
2
2
Replying to and
I've not thought about this in detail, but Tagless Final allows typed dispatch for languages that do not have GADTs. I don't see why that wouldn't work for Rust. Probably someone already has a clear blog post about this.
1