Yea sorry about that, I expected you to read my mind! I'll try to get a working playground later today.

The problem is when trying to implement compression I added the `Node.parent`

field which forced me to add all the lifetimes to `&mut self`

's effectively "pinning" any mut borrow to the whole lifetime of the Trie.

relevant type signature

```
pub struct Trie<'t, T> {
pub(crate) children: Vec<Node<'t, T>>,
child_size: usize,
}
pub fn insert_seq(self: &'t mut Trie<'t, T>, vals: &[T])
fn insert_rest(vals: &[T], node: Option<&'t mut Node<'t, T>>, mut idx: usize)
fn push_return(&mut self, val: Node<'t, T>) -> Option<&mut Node<'t, T>>
pub(crate) struct Node<'a, T> {
pub(crate) val: T,
// this self reference is the problem
parent: Cell<Option<&'a Node<'a, T>>>,
children: Vec<Node<'a, T>>,
compress: Vec<T>,
child_size: usize,
terminal: bool,
}
// adds then returns the just added node
pub(crate) fn add_child(&'a mut self, n: Node<'a, T>) -> Option<&mut Node<'a, T>>
```