Designing a Program around pure functions and immutable data. Essentially, the mathematical way of programming, where functions behave like they do in math, and data consists of mathematical objects that have a single identity, not a changing one. Instead of changing the state of objects, data is transformed by being passed through a composition of functions.