nix-playgraound/notes/034-haskell-writer-audit.md

1.6 KiB

Haskell Writer for Audit Trails

This note covers 31-haskell-writer-audit/, which simulates a rollout while accumulating ordered audit lines with Writer.


1. What Writer Adds Here

The example does two things at once:

  • compute a final RolloutReport, and
  • collect human-readable audit lines in execution order.

That is the shape Writer is good at:

simulateRollout :: ReleaseJob -> Writer [String] RolloutReport

The result and the log are produced together, but the rollout code stays direct and readable.


2. Why the Log Is Worth Teaching

The audit trail is not decorative. It captures meaningful rollout steps:

  • rollout start,
  • target scaling,
  • schema migration,
  • traffic shifting, and
  • rollout completion.

For canary rollouts, the example records extra milestones and observation points. That makes the logged structure richer than a toy "hello logger" example.


3. Why This Stays Separate from Error Handling

Writer is used here only for logging.

The example does not mix in failure handling or configuration lookup, because that would blur the concept. Parsing still happens before the writer run, and the rollout simulation itself is deterministic.

That keeps the example focused on one question: how do you accumulate ordered auxiliary output while computing a result?


4. Commands to Try

cd 31-haskell-writer-audit

nix develop
cabal run
cabal run -- api:production:canary:20:3 worker:staging:rolling:0:2
cabal test

nix build
./result/bin/mini-audit api:production:canary:20:3 worker:staging:rolling:0:2

nix run . -- api:production:canary:20:3 worker:staging:rolling:0:2
nix flake check