Source: https://people.eecs.berkeley.edu/~bh/HOPL.pdf