Maybe the crazy part is also what is a valid IPv6 string. Amd for safety mostly-never pass anything to the shell.
ULA is equivalent to RFC1918.
LL also exists in IPv4 (PIPA), but I take your point that it's not common in most environments.
Yes, privacy addressing is different.
But, the context that you were commenting in was about the representation of addresses, not the semantics themselves ("what is a valid IPv6 string"). And there doesn't seem to be any greater complexity other than the IPv4-mapped IPv6 addresses thing. Which doesn't seem all that complex, especially if you see it as a tradeoff to escape the DNS name ambiguity of IPv4.