Functional Architecture in Swift
Functional programming first, object-oriented / protocol-oriented programming second.
This skill guides how to design domain and core logic in Swift using immutability, pure functions, and explicit effects.
When to use
-
Domain modeling
-
Feature / business logic
-
Reducers and workflows
-
Dependency-injected use cases
-
Highly testable code
Architectural patterns
-
Functional Core / Imperative Shell
-
Feature-oriented design
-
Dependency injection via functions
-
Mealy & extended state machines
-
Effects as data
Functional techniques
-
Algebraic Data Types (enum + struct)
-
Functional operators (map, flatMap, reduce)
-
Partial application & currying
-
Optics (Lenses & Prisms with KeyPaths)
Reading order
-
references/state-machines.md
-
references/functional-operators.md
-
references/algebraic-data-types.md
-
references/optics.md
-
references/dependency-injection-currying.md
-
references/dependency-injection-decision-table.md
Dependency injection rules
-
Closures first
-
Capability structs second
-
Protocols last (boundary only)
Testing rules
-
Unit tests only in the core
-
Fake closures instead of mocks
-
No sleeps or timers
Summary
If it’s hard to test, simplify the design.