Fundamentals of functional programming