1. Read-only data structures, which are used by everyone in every language all the time.
2. Persistent data structures, which make the underlying immutable structures kind of mutable by creating new versions and reusing parts from the old versions of the structure.