Point-free style (tacit programming) defines functions without explicitly naming the arguments they operate on. Combined with pure functions and referential transparency, it can make code more declarative — or completely unreadable. This article shows both sides.
Prerequisites: FP #1 — compose/pipe, Functions #2 — Currying
1. What is Point-Free Style?
"Point" means the argument. Point-free means you don't name it:
Loading editor...
2. Common Point-Free Patterns
Loading editor...
3. When Point-Free Goes Wrong
Loading editor...
4. Referential Transparency — Same Input, Same Output
A function is referentially transparent if you can replace a call with its return value without changing program behavior:
Loading editor...
5. Pure Functions — The Foundation
Loading editor...
Key Takeaways
- Point-free: don't name arguments when the function is clear without them (
arr.filter(isEven), notarr.filter(x => isEven(x))). - Point-free is a tool, not a goal — use it when it clarifies, avoid it when it obscures.
- Referential transparency means an expression can be replaced by its value — the foundation of equational reasoning.
- Pure functions are deterministic and side-effect-free — they're predictable, testable, and cacheable.
- Push side effects (I/O, DOM, network) to the application boundary; keep the core pure.
Next: FP #5 — Immutability Patterns — Object.freeze, structuredClone, and Immer-style patterns.
