Type Theory & Functional Programming