# Pure Functions

Record: `arch:pure-functions`
Kind: technique
Layer: [Computation Core](https://banes-lab.com/records/layer/computation-core.md)
Severity: recommended
Scope: function, domain logic
Canonical: https://banes-lab.com/ontology#arch-pure-functions

## Repair

- Refactored by: Extract Pure Logic, Move IO Outward
- Detected by: side-effect calls inside pure layer
- Violated by: mutation, IO, global reads/writes
- Measured by: pure core ratio
- Enforced by: layer rules, [tests](https://banes-lab.com/records/lex/tests.md)

## requires

- [No Side Effects](https://banes-lab.com/records/lex/no-side-effects.md)
- [Explicit Inputs](https://banes-lab.com/records/lex/explicit-inputs.md)

## reinforces

- [Testability](https://banes-lab.com/records/arch/testability.md)
- [Determinism](https://banes-lab.com/records/arch/determinism.md)

## enables

- [Referential Transparency](https://banes-lab.com/records/arch/referential-transparency.md)

## conflicts-with

- [Hidden IO](https://banes-lab.com/records/lex/hidden-io.md)

## tensions-with

- [Stateful Operations](https://banes-lab.com/records/lex/stateful-operations.md)

## tensions

- [Pure Functions Stateful Operations](https://banes-lab.com/records/tension/pure-functions-stateful-operations.md)

## referenced-by

- [Referential Transparency](https://banes-lab.com/records/arch/referential-transparency.md)
- [Testability](https://banes-lab.com/records/arch/testability.md)
