more efficient, structurally recursive, persistent immutable list