You don't have to go as far as doubly-linked list. Writing a simple cons-list is hard enough:
enum List<T> {
Nil,
Cons(T, Box<List<T>>)
}
Imagine you're writing `Iterator`. You have a `&mut List<T>`. For `Nil`, you're done. For `Cons`, you take it apart, return the `T`, deref the `Box` and move your `&mut List<T>` to point to that value. Nothing could be easier, right?Except in Rust you can't do that! One can resort to unsafe code or use ugly and inefficient workarounds to remain in safe-land.