1c34928d

The build, before there is anything to build

The build, and nothing that uses it yet.

First of five. Each one adds a rule and exactly the machinery that rule needs,
and each passes `nix flake check` on its own.

## What is here

16 files, 706 lines.

- `flake.nix`: the dev shell, `release`, `hlint-check`, `weeder-check`, and the
  pre-commit hooks (hpack, cabal2nix, ormolu, nixpkgs-fmt).
- `.hlint.yaml`: partial functions banned, an allowlist of language extensions,
  `Data.ByteString.Char8` refused, lazy `foldr` and `modifyIORef` refused.
- `weeder.toml`, `cabal.project`, `stack.yaml`, `.envrc`, `.gitignore`.
- `hopinion`: a library with one function that prints that it has no rules, and
  an executable that calls it. It is here so that none of the checks above is
  vacuous.

Nothing parses Haskell. Nothing decides anything.

## The one thing worth arguing about

The warnings live in `package.yaml` rather than in the overlay, so a `cabal
build` in the dev shell says what a Nix build would; the overlay adds `-Werror`
on top. That makes the difference between a warning and a failure a property of
how it is built rather than of what it is.

`-Wunused-packages` and `weeder` are in that set deliberately. They are what
will keep every later PR to the machinery its rule actually needs: on the next
one they removed 14 dependencies, 13 definitions and a dozen imports that had
stopped being used.

## Review loop

```
nix flake check
```