Source: https://www.cs.cornell.edu/courses/cs1110/2019sp/schedule/slides/01-intro_types.pdf