Functional programming, design patterns