Foreword xiii Preface xv Acknowledgments xxi About the Author xxiii Part I: Functional Basics 1 Chapter 1: Immutability 3 What Is Functional Programming? 4 The Problem with Assignment 7 So Why Is It Called Functional? 10 No Change of State? 12 Immutability 15 Chapter 2: Persistent Data 17 On Cheating 19 Making Copies 20 Structural Sharing 23 Chapter 3: Recursion and Iteration 27 Iteration 28 Recursion 32 Chapter 4: Laziness 37 Lazy Accumulation 40 OK, but Why? 41 Coda 42 Chapter 5: Statefulness 43 When We MUST Mutate 47 Software Transactional Memory (STM) 48 Life Is Hard, Software Is Harder 51 Part II: Comparative Analysis 53 Chapter 6: Prime Factors 55 Java Version 56 Clojure Version 60 Conclusion 63 Chapter 7: Bowling Game 65 Java Version 66 Clojure Version 71 Conclusion 75 Chapter 8: Gossiping Bus Drivers 77 Java Solution 78 Clojure 88 Conclusion 93 Chapter 9: Object-Oriented Programming 95 Functional Payroll 98 Namespaces and Source Files 107 Conclusion 108 Chapter 10: Types 109 Part III: Functional Design 115 Chapter 11: Data Flow 117 Chapter 12: SOLID 125 The Single Responsibility Principle (SRP) 126 The Open-Closed Principle (OCP) 131 The Liskov Substitution Principle (LSP) 138 The Interface Segregation Principle (ISP) 147 The Dependency Inversion Principle (DIP) 152 Part IV: Functional Pragmatics 181 Chapter 13: Tests 183 But What about the REPL? 184 What about Mocks? 184 Property-Based Testing 186 A Diagnostic Technique 190 Functional 197 Chapter 14: GUI 199 Turtle-Graphics in Quil 200 Chapter 15: Concurrency 215 Conclusion 225 Part V: Design Patterns 227 Chapter 16: Design Patterns Review 229 Patterns in Functional Programming 233 Abstract Server 233 Adapter 236 Command 242 Composite 249 Decorator 260 Visitor 264 Abstract Factory 274 Conclusion 281 Postscript: OO Poison? 282 Part VI: Case Study 285 Chapter 17: Wa-Tor 287 Scratch That Itch 309 Showers Solve Problems 312 It's Time to Wildly Reproduce 322 What about the Sharks? 324 Conclusion 335 Afterword 337 Index 341.
Functional Design : Principles, Patterns, and Practices