Source: https://www.cs.utexas.edu/~wcook/papers/OOPvsADT/CookOOPvsADT90.pdf