~ / path / services

Services deepening path

You already write Clojure services (Ring/Reitit, components, domain maps) and want a sequenced path through applied FP — FC/IS, error rails, pipelines, state, and optional theory depth.

module 1

Shape of a service

How to structure a Ring handler: pure domain core, thin I/O shell, data-oriented models, and lifecycle composition without globals.

  1. Functional core, imperative shellpattern
  2. Data-oriented programmingpractice
  3. Modeling the domain with valuespractice
  4. Web stack: Ring and Reititecosystem
  5. Composing applications with componentspractice
module 2

Failure at the boundary

Expected vs unexpected failure, Result-style pipelines, Malli at the HTTP boundary, and the monad-shaped glue (with cats on the classpath).

On algebraic hierarchy: focus on Monoid through Monad; skip the SKI detour.

  1. Error handling: exceptions vs valuespractice
  2. Railway-oriented programmingpattern
  3. Malli schemasecosystem
  4. The algebraic hierarchytheory
  5. Category theory with catsecosystem
module 3

Data in motion

Pipelines that read like product requirements — threading, transducers, and mechanical refactors from imperative handlers.

  1. Imperative vs declarativetheory
  2. Processing pipelines: threading, for, transducerspractice
  3. Transducerspractice
  4. Purity vs side effectstheory
  5. Refactoring imperative to functionalpattern
module 4

State & concurrency in production

Atoms in apps, event logs as source of truth, Datalog-shaped queries, and concurrency choices for service workloads.

Last topic (CRDTs) is optional for single-node HTTP services.

  1. Organizing application statepractice
  2. State: atoms, refs, agentspractice
  3. Event sourcingtheory
  4. Datalog queriesecosystem
  5. core.async channelspractice
  6. CRDTstheory
module 5

Theory with payoff

optional

Polymorphism tradeoffs, folds beyond reduce, types that rule out invalid domain states — optional depth after the service-shaped core.

  1. The expression problempattern
  2. Protocols and multimethodspractice
  3. Recursion schemestheory
  4. Hindley-Milner type inferencetheory
  5. Make illegal states unrepresentablepattern
  6. Gradual typing with core.typedecosystem

Optional refresh

Skipped basics — dip in if you want a quick syntax or semantics refresher before module 1.

Concept map → for lateral exploration outside this sequence.