Haskell is the first programming language that allows applying type system advances to software development needs. In this part, we’ll discuss all the major topics in Haskell types, such as polymorphism, generalized algebraic data types, and type families. We’ll also talk about programming techniques based on the concept of dependent typing. Although we don’t have dependent types in Haskell at the time of writing, we can still use the corresponding techniques in our programs.