(As I’ve done in Java!)
To replace existing implementations with your own, because you want a LinkedArrayList (a linked list of blocks)? Or because you want a TreeMap instead of a HashMap, or a Set with different implementation?
Because you want to implement your own Either type to better handle return values (see https://github.com/spencerwi/Either.java )?
Thing is, in practice you usually don't need special generic containers. And when I actually need it, I'll just code up a non-generic implementation. When I need a complex type system I'll use Scala.
This allows me to have fully reactive collections in Java, lazy reactive collections, and more.
I can just connect to a socket transmitting updates with netty, write a transformer, apply those to a lazy reactive collection, and have the changes directly appear in the list in the UI, fully threadsafe.
Writing those things again, and again, every time, would be far more work, and increase the time I need to write code massively.
I’ve actually used go a bit, and tried reimplementing several of my projects in go, but either it wasn’t easily possible, or I had to translate dozens of generic classes into hundreds of non-generic versions, with lots of duplicated code.
And then I had found a bug, fixed it at one point, and had to copy it to hundreds of files.