00:00:20 Recap 00:03:45 Static checks and dynamic checks 00:05:55 Static checks 00:08:17 Dynamic checks 00:10:20 Type system 00:13:27 Strong typing and weak typing 00:17:34 Runtime checks 00:22:10 Type expressions 00:33:48 Type expression tree 00:38:03 Example program 00:41:45 Grammar 00:48:37 Data types 00:54:01 Semantic rules 01:10:14 Example expression 01:17:13 Equivalence of types (and type expressions) 01:21:15 Name equivalence and Structure equivalence 01:22:25 C structs For 01:14:45, some examples of languages that treat *if* as an expression that returns a value instead of a statement are ruby, elixir, and lisp. Love the irony that C structs does not have structural equivalence. Learned a lot, thanks!