we may not want to do this at this point, but:
generally speaking, an immutable class should not have a method named "replace".  This implies an Edit operation on the object.  Rather, it should be called something like - "create_new" or some such.