I implemented an academic paper (join tree) in C# here https://github.com/zvrba/Pfm
It provides the opposite: a mutable CoW data structure that is extremely cheap to "fork" so that all subsequent updates occur only on the new "fork" and are invisible to the old "fork".