- See previous post about Immutable Objects.
- Make functions pure whenever possible.
- No observable side-effects.
- Same inputs => same outputs.
- Don't modify inputs.
- Don't modify global state.
- Must return something; otherwise there should be a side-effect.
- Use an imperative shell to wrap your functional code.