# Functional Programming Simplified

## Resources

## Modules

## Rules for the book

- There will be no null values.
- Only pure functions will be used.
- Immutable values will be used for all fields.
- Whenever you use an if, you must always also use an else.
- We won’t create “classes” that encapsulate data and behavior.

## Chapter Checklist

- 1 Introduction (or, Why I Wrote This Book)
- 2 Who This Book is For
- 3 Goals, Part 1: “Soft” Goals of This Book
- 4 Goals, Part 2: Concrete Goals
- 5 Goals, Part 3: A Disclaimer
- 6 Question Everything
- 7 Rules for Programming in this Book
- 8 One Rule for Reading this Book
- 9 What is “Functional Programming”?
- 10 What is This Lambda You Speak Of?
- 11 The Benefits of Functional Programming
- 12 Disadvantages of Functional Programming
- 13 The “Great FP Terminology Barrier”
- 14 Pure Functions
- 15 Grandma’s Cookies (and Pure Functions)
- 16 Benefits of Pure Functions
- 17 Pure Functions and I/O
- 18 Pure Function Signatures Tell All
- 19 Functional Programming as Algebra
- 20 A Note About Expression-Oriented Programming
- 21 Functional Programming is Like Unix Pipelines
- 22 Functions Are Variables, Too // (Talks about Eta Expansion)
- 23 Using Methods As If They Were Functions
- 24 How to Write Functions That Take Functions as Input Parameters
- 25 How to Write a ‘map’ Function
- 26 How to Use By-Name Parameters
- 27 Functions Can Have Multiple Parameter Groups
- 28 Partially-Applied Functions (and Currying)
- 29 Recursion: Introduction
- 30 Recursion: Motivation
- 31 Recursion: Let’s Look at Lists
- 32 Recursion: How to Write a ‘sum’ Function
- 33 Recursion: How Recursive Function Calls Work
- 34 Visualizing the Recursive sum Function
- 35 Recursion: A Conversation Between Two Developers
- 36 Recursion: Thinking Recursively
- 37 JVM Stacks and Stack Frames
- 38 A Visual Look at Stacks and Frames
- 39 Tail-Recursive Algorithms
- 40 A First Look at “State”
- 41 A Functional Game (With a Little Bit of State)
- 42 A Quick Review of Case Classes
- 43 Update as You Copy, Don’t Mutate
- 44 A Quick Review of for Expressions
- 45 How to Write a Class That Can Be Used in a for Expression
- 46 Creating a Sequence Class to be Used in a for Comprehension
- 47 Making Sequence Work in a Simple for Loop
- 48 HowToMakeSequenceWorkasa Single Generator in a for Expression
- 49 Enabling Filtering in a for Expression
- 50 How to Enable the Use of Multiple Generators in a for Expression
- 51 A Summary of the for Expression Lessons
- 52 Pure Functions Tell No Lies
- 53 Functional Error Handling (Option, Try, or Either)
- 54 Embrace The Idioms!
- 55 What to Think When You See That Opening Curly Brace
- 56 A Quick Review of How flatMap Works
- 57 Option Naturally Leads to flatMap
- 58 flatMap Naturally Leads to for
- 59 for Expressions are Better Than getOrElse
- 60 Recap: Option -> flatMap -> for
- 61 A Note About Things That Can Be Mapped-Over
- 62 A Quick Review of Companion Objects and apply
- 63 Starting to Glue Functions Together
- 64 The “Bind” Concept
- 65 Getting Close to Using bind in for Expressions
- 66 Using a “Wrapper” Class in a for Expression
- 67 Making Wrapper More Generic
- 68 Changing “new Wrapper” to “Wrapper”
- 69 Using bind in a for Expression
- 70 How Debuggable, f, g, and h Work
- 71 A Generic Version of Debuggable
- 72 One Last Debuggable: Using List Instead of String
- 73 Key Points About Monads
- 74 Signpost: Where We’re Going Next
- 75 Introduction: The IO Monad
- 76 How to Use an IO Monad
- 77 Assigning a for Expression to a Function
- 78 The IO Monad and a for Expression That Uses Recursion
- 79 Diving Deeper Into the IO Monad
- 80 I’ll Come Back to the IO Monad
- 81 Functional Composition
- 82 An Introduction to Handling State
- 83 Handling State Manually
- 84 Getting State Working in a for Expression
- 85 Handling My Golfing State with a State Monad
- 86 The State Monad Source Code
- 87 Signpost: Getting IO and State Working Together
- 88 TryingtoWriteaforExpression with IO and State
- 89 Seeing the Problem: Trying to Use State and IO Together
- 90 Solving the Problem with Monad Transformers
- 91 Beginning the Process of Understanding StateT
- 92 Getting Started: We’re Going to Need a Monad Trait
- 93 Now We Can Create StateT
- 94 Using StateT in a for Expression
- 95 Trying to Combine IO and StateT in a for Expression
- 96 Fixing the IO Functions With Monadic Lifting
- 97 A First IO/StateT for Expression
- 98 The Final IO/StateT for Expression
- 99 Summary of the StateT Lessons
- 100 Signpost: Modeling the world with Scala/FP
- 101 What is a Domain Model?
- 102 A Review of OOP Data Modeling
- 103 Modeling the “Data” Portion of the Pizza POS System with Scala/FP
- 104 First Attempts to Organize Pure Functions
- 105 Implementing FP Behavior with Modules
- 106 Implementing the Pizza POS System Using a Modular Approach
- 107 The “Functional Objects” Approach
- 108 Demonstrating the “Functional Objects” Approach
- 109 Summary of the Domain Modeling Approaches
- 110 ScalaCheck 1: Introduction
- 111 ScalaCheck 2: A More-Complicated Example
- 112 The Problem with the IO Monad
- 113 Signpost: Type Classes
- 114 Type Classes 101: Introduction
- 115 Type Classes 102: The Pizza Class
- 116 Type Classes 103: The Cats Library
- 117 Lenses, to Simplify “Update as You Copy”
- 118 Signpost: Concurrency
- 119 Concurrency and Mutability Don’t Mix
- 120 Scala Concurrency Tools
- 121 Akka Actors
- 122 Akka Actor Examples
- 123 Scala Futures
- 124 A Second Futures Example
- 125 Key Points About Futures
- 126 A Few Notes About Real World Functional Programming
- 127 Signpost: Wrapping Things Up
- 128 The Learning Path
- 129 Final Summary
- 130 Where To Go From Here
- A Explaining Scala’s val Function Syntax
- B TheDifferencesBetweenvalanddef When Creating Functions
- C A Review of Anonymous Functions
- D Recursion is Great, But ...
- E for expression translation examples
- F On Using def vs val To Define Abstract Members in Traits
- G Algebraic Data Types

## Backlinks

Computer Science Books

- [[functional-programming-simplified]]

Scala For Comprehensions

From chapter 60 of [[functional-programming-simplified]]:

Scala Option

From chapter 60 of [[functional-programming-simplified]]:

dhruv's wiki

- [[functional-programming-simplified]]

Scala Learning Resources

- [[functional-programming-simplified]].

Scala Map

From chapter 56 of [[functional-programming-simplified]]: