5223cbb3

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

One derivation, an hlint config with reasons, and a README that is two things

makeHopinionCheck replaces checksFor, and returns a single derivation rather
than an attrset, mirroring dekking's makeCoverageReport: the product is the
project report at the output, and the judge that reads it is a buildInput, so
building it fails on a finding and leaves the report readable either way. The
per-package outputs are underneath it, pulled in by the project one, so changing
a single package still rebuilds three derivations rather than all of them.

The hlint config takes its shape from nix-ci's. Every ban now says why and what
to use instead, which is the difference between a rule and a wall. It gains the
future and use-th-quotes groups, the unsafe-IO and lazy-IORef bans, the
QuickCheck ones that keep a property test a property test, and a Char8 ban.
foldr is restricted with one exception, and the exception is what proves the
ban: removing it makes hlint report the one call site.

Two of nix-ci's are deliberately not copied. Its per-extension bans, because the
allowlist here is the stronger form of the same thing, and now the load-bearing
one: extensions moved into the modules that need them, so the allowlist is what
stops a new one arriving unremarked. And `typeApplications: required` on show,
which needs a patched hlint this flake does not carry.

README.md is now what it says on the tin and how to add the check to a project.
The 420 lines it carried were design and rationale, so they are in plan/notes.md
with the rest of the planning material, and go when plan/ goes. check-plan.sh
follows them there: the open decisions still have to be split by owner, which is
the assertion that keeps them owned rather than merely written down.