The tree consists of mutable, but strictly protected objects enriched with run-time type information . In other words; each tree has a shape (type information) and state (data). From this living tree, immutable and structurally shared snapshots are generated automatically.