finished 3. Types and Typeclasses