Rust’s traits come to mind. If it quacks like an Iterable it’s an Interable
Something that quacks like an iterable cannot be used as an iterable, unless the trait is explicitly stated — unlike python, where it simply has to quack.
[1] https://channel9.msdn.com/posts/MDCC-TechTalk-Classes-Jim-bu...
∃a.P(a)
----------------- Remove-Exist
∀b.(∀a. P(a)→b)→b
Some static languages had existentials even before they got parametric polymorphism (Go interfaces). This is why we could do so much in Go without generics!(that's a joke)