Mutation: add SwitchFunctionArguments operator ## What Adds a new mutation operator, **`SwitchFunctionArguments`**: at a prefix function (or data-constructor) application, for every pair of value arguments that have the *same type*, it emits one mutant that swaps those two arguments. Examples (from the new `Example.SwitchArgsLib`): - `divideThe a b = div a b` → `div b a` (one mutant) - `makeColour r g b = RGB r g b` → three mutants: swap (r,g), (r,b), (g,b) - `greyscale v = RGB v v v` → **no** mutants (every swap is a no-op) ## How - Runs on the typechecked AST (`GhcTc`), reading each argument's type via `lhsExprType` and comparing with `eqType`. The same-type precondition guarantees the swapped application stays well-typed; the existing desugar-validation pass drops anything that slips through. - **Maximal-spine only:** gated on `instrumentEnvAppDepth == 0`, so the curried sub-application `f a` inside `f a b` does not re-emit a swap the full spine already covers. - **No-op skip:** pairs whose arguments have identical source text are dropped (the mutant would be identical to the original and unkillable). - Rendering: a new `SwapSpans` source delta plus a pure, unit-tested `applySwapSpans` that swaps the two argument substrings in the source preview. ## Tests / feedback loops - 4 new unit tests for `applySwapSpans` in `InstrumentSpec`. - New `Example.SwitchArgsLib` + gen spec that kill every swap mutant. - Disabled the operator on the symmetric `majorityOf5Wrapper` in `ConstFnLib` (its swaps are equivalent, unkillable mutants) and documented the new site on `impliesPair`. - Golden manifests regenerated. Validated locally: - `stack build`/`test sydtest-mutation-plugin` — 34/34 pass - `nix build .#checks.x86_64-linux.mutation-manifest-example` — PASS - `nix build .#checks.x86_64-linux.mutation-sydtest-mutation-example` (all-killed) — PASS - `pre-commit run --all-files` — PASS Plugin version bumped to `0.4.0.0` with a CHANGELOG entry.