Explores subtyping, generics, and variance in Scala, emphasizing the importance of precise type descriptions and demonstrating practical applications of for expressions.
Explores the core features of object-oriented programming, including dynamic dispatch, encapsulation, inheritance, and subtyping, using Java examples and practical insights.
Covers how classes and objects are organized in packages, imports, Scala's class hierarchy, traits, top types, the Nothing type, exceptions, and includes an exercise on type determination.
Focuses on implementing a type checker for Amy, covering name and type analysis, typing constraints generation, and the importance of type checking in compilation.