Data Structures and Functional Programming