It seems so beautiful.
// generics
func useAnimal<A: Animal>(_ animal: A) { /* ... */ }
// opaque argument types (sugar of ^)
func useAnimal(_ animal: some Animal) { /* ... */ }
// existential (argument) types
func useAnimal(_ animal: any Animal) { /* ... */ }
// "reverse generics"
func makeAnimal() -> <A: Animal> A { /* ... */ }
// opaque result types (sugar of ^)
func makeAnimal() -> some Animal { /* ... */ }
// existential (result) types
func makeAnimal() -> any Animal { /* ... */ }
// opaque types with constraints
let sequence: some Sequence<.Element == Int> = [2, 3, 5]
// generalized existentials
let sequence: any Sequence<.Element == Int> = [2, 3, 5]