Abstract types have existential type.  ML&#x2F;Coq modules are just existentially-typed &quot;package&quot; data.  Haskell type-classes are just another variation on the same concept, with only one instantiation of the type-class allowed at each internal type so the compiler can search for instances coherently.<p><a href="http:&#x2F;&#x2F;dl.acm.org&#x2F;citation.cfm?id=45065&amp;dl=ACM&amp;coll=DL&amp;CFID=756942517&amp;CFTOKEN=16252012" rel="nofollow">http:&#x2F;&#x2F;dl.acm.org&#x2F;citation.cfm?id=45065&amp;dl=ACM&amp;coll=DL&amp;CFID=...</a><p>Which reminds me, I should finish reading Tomer Ullman&#x27;s PhD thesis to see if he managed to integrate existential types into his theory of causal-role concepts and theory formation.