lecture: lecture 2: type driven almost finish