I moved the proxy to the top level of the file so that List uses it instead of only :: .  This means that all List instances use the same mechanism for serialization and de-serialization, and readObject below works for both, simplifying the code a bit.  The previous commit in this PR only used this code for :: which had a corner case where readObject might return Nil.  The code in master seems to either have a ClassCastException or AssertionError for the same case.