(continued) - focus on practicality; - the entire thing is designed with nice error messages in mind; - local type inference, no need to declare local variables; - non-nillable types by default; - smart control-flow dependent typing; - union and intersection types.