Hacker News new | ask | show | jobs
by johnfn 248 days ago
I tend to like the idea of making impossible states impossible, but your particular example seems to have a number of negative tradeoffs. For one, it's more complex than the original data structure - a simple call like .map() is now a fairly chunky operation, and if you want to filter after that, you really have a mess on your hands. Additionally, you seem to have traded off one set of "state we shouldn't allow to be represented" for another. For instance, you could have mistakenly included `active` in `prev` or `next`. That is something you couldn't have done in the initial version.
1 comments

The iterator can be implemented fairly simply:

  self.prev.iter()
    .chain(iter::once(self.active))
    .chain(self.next)
I'm not sure what you mean by including active in another position, but see my sibling comment that makes the active element of a different type, for another wrinkle on this thing.