Say what a path is
First of the stack. #13, #11 and #12 sit on this.
A `FilePath` is a `String`, so nothing about it says whether it holds a file or a directory, whether it is absolute or relative, or whether it is a path at all. The specs here named one twenty times: `resourceDir` was a `String` in eight of them, and three separate copies of `rootAt` took one.
They take `path`'s `Path` now, and ask `path-io` for the listings. Where a library wants a `String` it gets `toFilePath` at the call, which is the one place a path should be spelled that way.
## Three things that fell out
**`hopinion-gen` no longer depends on `directory`.** `listDirRel` answers with the directories and the files already told apart, which is what every one of these listings wanted. Several assertions that compared sorted strings now compare `Path` values and say which kind they expected:
```haskell
-- before
entries <- listDirectory resourceDir
sort entries `shouldBe` ["every-kind.golden", "failure.golden", "repo"]
-- after
(dirs, files) <- listDirRel resourceDir
sort dirs `shouldBe` [[reldir|repo|]]
sort files `shouldBe` [[relfile|every-kind.golden|], [relfile|failure.golden|]]
```
**`Project.hs` compared a directory's name against two words.** It compares directories now, so the trailing separator that made `dropTrailingPathSeparator` necessary is not in the way.
**sydtest moves to 0.30.0.0**, where `scenarioDir` hands over a `Path Rel File` rather than a `FilePath`. That is what the two scenario-driven specs needed, and it is why the pin moves in a commit that otherwise only touches this repository. NorfairKing/sydtest#137.
## No rule yet
Nothing enforces any of this here. That is #13, and it is separate because this is a change to existing code and that one is not: after this, #13 adds a rule file, the fact it reads, and its test resources, and touches nothing that already existed bar the line that registers it.
178 tests, unchanged in count: nothing here adds or removes a test, it retypes what they pass around.
## Review loop
```
nix flake check
nix develop --command cabal test hopinion-test --test-options="--ai-executor"
```