This paper demonstrates the advantages and disadvantages of static and dynamic type systems. This is done through careful exposition of various implementations. As a motivating example, a subset of the ML language is used to investigate the Hindley-Milner type inference algorithm to which an original extension is made