3 ms·
Yeah that's true, but the problem with your version is it loses the homogeny because an empty list can't simply be a Node, it has to be represented in some othe
by brundolf 6y ago
Yeah that's true, but the problem with your version is it loses the homogeny because an empty list can't simply be a Node, it has to be represented in some other way (as an Option<Node> or something), so we're back to square one. Maybe I was wrong and this can't be done perfectly even with union types.
- vips7L 6y agoIn that case wouldn't you just: struct List { head: Option<Node> } struct Node { value: i32, next: Option<Box<Node>> }
- brundolf 6y agoYep, but this replicates the original inelegancy (from the article): Option<Node> and Option<Box<Node>> are not the same type, and so they can't be treated the same way.
- vips7L 6y agoI guess you could just allocate the head node on the heap too. I think rust probably has better tools for this. Probably some sort of let node = node.next; while let Some(n) = node { node = n.next }