<ivmarkov[m]> "Here, JFYI: https://github.com/..." <- Continuing here because I need to share my progress (or lack of progress thereof) with somebody, even if it is just me listening to myself. :) My ideas from above ^^^ based on your pool idea do work...

But... lifetime invariance just did bite my a** again! Thew problem is that the `Fabrics` struct in the Rust playground from above is hidden behind a... `RefCell<Fabrics<'a>>` (Or a `Mutex<Fabrics<'a>>` if you wish... it is the same w.r.t. lifetime variance after all.) And because of that... `'a` becomes invariant, even if it is all just `&'a refs` and not `&'a mut refs`  everywhere. So my dream of keeping
```rust
struct Matter<'a> {
    foo: &'a str,
    fabrics: RefCell<Fabrics<'a>>, // Fabrics is now lifetimed
}
```

... does not work. And the whole excercise was to keep `Matter` with a single, covariant lifetime `'a`. It should be instead:
```rust
struct Matter<'a, 'b> {
    foo: &'a str,
    fabrics: RefCell<Fabrics<'b>>, // Separate lifetime, because of invariance
}
```

... which is exactly what I wanted to avoid with the "pools" idea... :(((