Describir: Type Theory and Functional Programming