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" ```