How to Learn Type-Level Programming?