1. 0.03 s $ /nix/store/vzx1mi9c0xfadmsm9dhd83d005cb1qs9-coreutils-9.8/bin/timeout --kill-after=15s 1800s /nix/store/99b1z08awpxj8b6mzggn59gp1shljnff-nix-2.34.5/bin/nix --extra-experimental-features nix-command --extra-experimental-features flakes --log-format internal-json build --no-link git+https://github.com/sellout/flaky?ref=docs&rev=a96b4cd7cf38ec7286758e03fd2e4dacc2befe62#checks.x86_64-linux.formatter --print-build-logs
  2. 0.12 s warning: ignoring untrusted flake configuration setting 'allow-import-from-derivation'.
  3. 0.12 s Pass '--accept-flake-config' to trust it
  4. 0.12 s warning: ignoring untrusted flake configuration setting 'extra-experimental-features'.
  5. 0.12 s Pass '--accept-flake-config' to trust it
  6. 0.12 s warning: ignoring untrusted flake configuration setting 'extra-substituters'.
  7. 0.12 s Pass '--accept-flake-config' to trust it
  8. 0.12 s warning: ignoring untrusted flake configuration setting 'extra-trusted-public-keys'.
  9. 0.12 s Pass '--accept-flake-config' to trust it
  10. 0.12 s warning: ignoring untrusted flake configuration setting 'sandbox'.
  11. 0.12 s Pass '--accept-flake-config' to trust it
  12. 0.12 s warning: ignoring untrusted flake configuration setting 'use-registries'.
  13. 0.12 s Pass '--accept-flake-config' to trust it
  14. 0.12 s
  15. 4.97 s error (ignored): SQLite database '/var/cache/private/nix-ci-worker/eval-cache-v6/8ceed62d0b1a6b31696e43d1d018c42608618d599f107bd80bcb171d1bc88fcb.sqlite' is busy
  16. 5.10 s Downloading cached source from https://cache.nix-ci.com
  17. 20.38 s Progress: 1 of 1 downloaded from cache
  18. 33.15 s
  19. 33.17 s Downloading cached git-2.51.2-doc from https://cache.nix-ci.com
  20. 33.21 s Downloading cached iana-etc from https://cache.nix-ci.com
  21. 33.21 s Downloading cached mailcap from https://cache.nix-ci.com
  22. 33.21 s Downloading cached perl5.40.0-Digest-HMAC from https://cache.nix-ci.com
  23. 33.21 s Downloading cached perl5.40.0-FCGI-ProcManager from https://cache.nix-ci.com
  24. 33.21 s Downloading cached perl5.40.0-HTML-TagCloud from https://cache.nix-ci.com
  25. 33.21 s Downloading cached perl5.40.0-URI from https://cache.nix-ci.com
  26. 33.21 s Downloading cached perl5.40.0-libnet from https://cache.nix-ci.com
  27. 33.21 s Downloading cached tzdata from https://cache.nix-ci.com
  28. 33.21 s Downloading cached bash from https://cache.nix-ci.com
  29. 33.21 s Downloading cached expat from https://cache.nix-ci.com
  30. 33.21 s Downloading cached gawk from https://cache.nix-ci.com
  31. 33.21 s Downloading cached gnu-config-2024-01 from https://cache.nix-ci.com
  32. 33.21 s Downloading cached perl5.40.0-Encode-Locale from https://cache.nix-ci.com
  33. 33.21 s Downloading cached perl5.40.0-HTML-Tagset from https://cache.nix-ci.com
  34. 33.21 s Downloading cached perl5.40.0-IO-HTML from https://cache.nix-ci.com
  35. 33.25 s Progress: 0 of 8 built, 1 of 97 downloaded from cache (15 downloading)
  36. 33.25 s Downloading cached alejandra from https://cache.nix-ci.com
  37. 33.25 s Progress: 0 of 8 built, 2 of 97 downloaded from cache (15 downloading)
  38. 33.25 s Downloading cached bzip2-1.0.8-bin from https://cache.nix-ci.com
  39. 33.28 s Progress: 0 of 8 built, 3 of 97 downloaded from cache (15 downloading)
  40. 33.28 s Downloading cached curl from https://cache.nix-ci.com
  41. 33.28 s Progress: 0 of 8 built, 4 of 97 downloaded from cache (15 downloading)
  42. 33.28 s Downloading cached ed from https://cache.nix-ci.com
  43. 33.28 s Progress: 0 of 8 built, 5 of 97 downloaded from cache (15 downloading)
  44. 33.28 s Downloading cached file from https://cache.nix-ci.com
  45. 33.31 s Progress: 0 of 8 built, 6 of 97 downloaded from cache (15 downloading)
  46. 33.31 s Downloading cached gdbm-1.26-lib from https://cache.nix-ci.com
  47. 33.33 s Progress: 0 of 8 built, 7 of 97 downloaded from cache (15 downloading)
  48. 33.33 s Downloading cached gmp-with-cxx from https://cache.nix-ci.com
  49. 33.41 s Progress: 0 of 8 built, 8 of 97 downloaded from cache (15 downloading)
  50. 33.41 s Downloading cached gmp-with-cxx from https://cache.nix-ci.com
  51. 33.43 s Progress: 0 of 8 built, 9 of 97 downloaded from cache (15 downloading)
  52. 33.43 s Downloading cached git-lfs from https://cache.nix-ci.com
  53. 33.43 s Progress: 0 of 8 built, 10 of 97 downloaded from cache (15 downloading)
  54. 33.43 s Downloading cached gnugrep from https://cache.nix-ci.com
  55. 33.43 s Progress: 0 of 8 built, 11 of 97 downloaded from cache (15 downloading)
  56. 33.43 s Downloading cached gnumake from https://cache.nix-ci.com
  57. 33.43 s Progress: 0 of 8 built, 12 of 97 downloaded from cache (15 downloading)
  58. 33.43 s Downloading cached gnused from https://cache.nix-ci.com
  59. 33.54 s Progress: 0 of 8 built, 13 of 97 downloaded from cache (15 downloading)
  60. 33.54 s Downloading cached gnutar from https://cache.nix-ci.com
  61. 33.56 s Progress: 0 of 8 built, 14 of 97 downloaded from cache (15 downloading)
  62. 33.56 s Downloading cached icu4c from https://cache.nix-ci.com
  63. 33.66 s Progress: 0 of 7 built, 15 of 97 downloaded from cache (15 downloading)
  64. 33.66 s Downloading cached gettext from https://cache.nix-ci.com
  65. 33.81 s Progress: 0 of 7 built, 16 of 97 downloaded from cache (15 downloading)
  66. 33.81 s Downloading cached gzip from https://cache.nix-ci.com
  67. 33.83 s Progress: 0 of 7 built, 17 of 97 downloaded from cache (15 downloading)
  68. 33.83 s Downloading cached json-c from https://cache.nix-ci.com
  69. 33.89 s Progress: 0 of 7 built, 18 of 97 downloaded from cache (15 downloading)
  70. 33.89 s Downloading cached keep-sorted from https://cache.nix-ci.com
  71. 33.89 s Progress: 0 of 7 built, 19 of 97 downloaded from cache (15 downloading)
  72. 33.89 s Downloading cached libffi from https://cache.nix-ci.com
  73. 33.94 s Progress: 0 of 7 built, 20 of 97 downloaded from cache (15 downloading)
  74. 33.94 s Downloading cached libuv from https://cache.nix-ci.com
  75. 33.96 s Progress: 0 of 7 built, 21 of 97 downloaded from cache (15 downloading)
  76. 33.96 s Downloading cached libxcrypt from https://cache.nix-ci.com
  77. 33.97 s Progress: 0 of 7 built, 22 of 97 downloaded from cache (15 downloading)
  78. 33.97 s Downloading cached mpdecimal from https://cache.nix-ci.com
  79. 33.99 s Progress: 0 of 7 built, 23 of 97 downloaded from cache (15 downloading)
  80. 33.99 s Downloading cached ncurses from https://cache.nix-ci.com
  81. 34.01 s Progress: 0 of 7 built, 24 of 97 downloaded from cache (15 downloading)
  82. 34.02 s Downloading cached coreutils from https://cache.nix-ci.com
  83. 34.03 s Progress: 0 of 7 built, 25 of 97 downloaded from cache (15 downloading)
  84. 34.03 s Downloading cached numactl from https://cache.nix-ci.com
  85. 34.06 s Progress: 0 of 7 built, 26 of 97 downloaded from cache (15 downloading)
  86. 34.06 s Downloading cached openssl-3.6.1-bin from https://cache.nix-ci.com
  87. 34.09 s Progress: 0 of 7 built, 27 of 97 downloaded from cache (15 downloading)
  88. 34.09 s Downloading cached patch from https://cache.nix-ci.com
  89. 34.12 s Progress: 0 of 7 built, 28 of 97 downloaded from cache (15 downloading)
  90. 34.12 s Downloading cached patchelf from https://cache.nix-ci.com
  91. 34.22 s Progress: 0 of 7 built, 29 of 97 downloaded from cache (15 downloading)
  92. 34.22 s Downloading cached perl5.40.0-Clone from https://cache.nix-ci.com
  93. 34.27 s Progress: 0 of 6 built, 30 of 97 downloaded from cache (15 downloading)
  94. 34.27 s Downloading cached perl5.40.0-Crypt-URandom from https://cache.nix-ci.com
  95. 34.27 s Progress: 0 of 6 built, 31 of 97 downloaded from cache (15 downloading)
  96. 34.27 s Downloading cached perl5.40.0-FCGI from https://cache.nix-ci.com
  97. 34.28 s Progress: 0 of 6 built, 32 of 97 downloaded from cache (15 downloading)
  98. 34.28 s Downloading cached elfutils from https://cache.nix-ci.com
  99. 34.30 s Progress: 0 of 6 built, 33 of 97 downloaded from cache (15 downloading)
  100. 34.30 s Downloading cached perl5.40.0-LWP-MediaTypes from https://cache.nix-ci.com
  101. 34.33 s Progress: 0 of 6 built, 34 of 97 downloaded from cache (15 downloading)
  102. 34.33 s Downloading cached perl5.40.0-Mozilla-CA from https://cache.nix-ci.com
  103. 34.34 s Progress: 0 of 6 built, 35 of 97 downloaded from cache (15 downloading)
  104. 34.34 s Downloading cached perl5.40.0-Net-HTTP from https://cache.nix-ci.com
  105. 34.34 s Progress: 0 of 6 built, 36 of 97 downloaded from cache (15 downloading)
  106. 34.34 s Downloading cached libuv-1.51.0-dev from https://cache.nix-ci.com
  107. 34.35 s Progress: 0 of 6 built, 37 of 97 downloaded from cache (15 downloading)
  108. 34.35 s Downloading cached perl5.40.0-Net-SSLeay from https://cache.nix-ci.com
  109. 34.39 s Progress: 0 of 6 built, 38 of 97 downloaded from cache (15 downloading)
  110. 34.39 s Downloading cached perl5.40.0-TermReadKey from https://cache.nix-ci.com
  111. 34.39 s Progress: 0 of 6 built, 39 of 97 downloaded from cache (15 downloading)
  112. 34.39 s Downloading cached perl5.40.0-Test-Needs from https://cache.nix-ci.com
  113. 34.40 s Progress: 0 of 6 built, 40 of 97 downloaded from cache (15 downloading)
  114. 34.40 s Downloading cached diffutils from https://cache.nix-ci.com
  115. 34.40 s Progress: 0 of 6 built, 41 of 97 downloaded from cache (15 downloading)
  116. 34.40 s Downloading cached findutils from https://cache.nix-ci.com
  117. 34.40 s Progress: 0 of 6 built, 42 of 97 downloaded from cache (15 downloading)
  118. 34.40 s Downloading cached perl from https://cache.nix-ci.com
  119. 34.41 s Progress: 0 of 6 built, 43 of 97 downloaded from cache (15 downloading)
  120. 34.41 s Downloading cached openssl-3.6.1-dev from https://cache.nix-ci.com
  121. 34.41 s Progress: 0 of 6 built, 44 of 97 downloaded from cache (15 downloading)
  122. 34.41 s Downloading cached perl5.40.0-Test-RequiresInternet from https://cache.nix-ci.com
  123. 34.41 s Progress: 0 of 6 built, 45 of 97 downloaded from cache (15 downloading)
  124. 34.41 s Downloading cached perl5.40.0-Authen-SASL from https://cache.nix-ci.com
  125. 34.45 s Progress: 0 of 6 built, 46 of 97 downloaded from cache (15 downloading)
  126. 34.45 s Downloading cached perl5.40.0-TimeDate from https://cache.nix-ci.com
  127. 34.45 s Progress: 0 of 6 built, 47 of 97 downloaded from cache (15 downloading)
  128. 34.45 s Downloading cached perl5.40.0-Try-Tiny from https://cache.nix-ci.com
  129. 34.45 s Progress: 0 of 6 built, 48 of 97 downloaded from cache (15 downloading)
  130. 34.45 s Downloading cached perl5.40.0-WWW-RobotRules from https://cache.nix-ci.com
  131. 34.45 s Progress: 0 of 6 built, 49 of 97 downloaded from cache (15 downloading)
  132. 34.45 s Downloading cached shfmt from https://cache.nix-ci.com
  133. 34.45 s Progress: 0 of 6 built, 50 of 97 downloaded from cache (15 downloading)
  134. 34.45 s Downloading cached shellcheck-0.11.0-bin from https://cache.nix-ci.com
  135. 34.51 s Progress: 0 of 6 built, 51 of 97 downloaded from cache (15 downloading)
  136. 34.51 s Downloading cached sqlite-3.50.4-bin from https://cache.nix-ci.com
  137. 34.56 s Progress: 0 of 6 built, 52 of 97 downloaded from cache (15 downloading)
  138. 34.56 s Downloading cached perl5.40.0-IO-Socket-SSL from https://cache.nix-ci.com
  139. 34.57 s Progress: 0 of 6 built, 53 of 97 downloaded from cache (15 downloading)
  140. 34.57 s Downloading cached readline from https://cache.nix-ci.com
  141. 34.57 s Progress: 0 of 6 built, 54 of 97 downloaded from cache (15 downloading)
  142. 34.57 s Downloading cached treefmt from https://cache.nix-ci.com
  143. 34.58 s Progress: 0 of 6 built, 55 of 97 downloaded from cache (15 downloading)
  144. 34.58 s Downloading cached update-autotools-gnu-config-scripts-hook from https://cache.nix-ci.com
  145. 34.58 s Progress: 0 of 6 built, 56 of 97 downloaded from cache (15 downloading)
  146. 34.58 s Downloading cached perl5.40.0-HTTP-Date from https://cache.nix-ci.com
  147. 34.58 s Progress: 0 of 6 built, 57 of 97 downloaded from cache (15 downloading)
  148. 34.58 s Downloading cached util-linux-minimal-2.41.3-lib from https://cache.nix-ci.com
  149. 34.58 s Progress: 0 of 6 built, 58 of 97 downloaded from cache (15 downloading)
  150. 34.58 s Downloading cached xz-5.8.1-bin from https://cache.nix-ci.com
  151. 34.59 s Progress: 0 of 6 built, 59 of 97 downloaded from cache (15 downloading)
  152. 34.59 s Downloading cached zlib-1.3.1-dev from https://cache.nix-ci.com
  153. 34.63 s Progress: 0 of 6 built, 60 of 97 downloaded from cache (15 downloading)
  154. 34.63 s Downloading cached zlib-ng from https://cache.nix-ci.com
  155. 34.64 s Progress: 0 of 6 built, 61 of 97 downloaded from cache (15 downloading)
  156. 34.65 s Downloading cached perl5.40.0-Test-Fatal from https://cache.nix-ci.com
  157. 34.66 s Progress: 0 of 6 built, 62 of 97 downloaded from cache (15 downloading)
  158. 34.66 s Downloading cached perl5.40.0-Net-SMTP-SSL from https://cache.nix-ci.com
  159. 34.66 s Progress: 0 of 6 built, 63 of 97 downloaded from cache (15 downloading)
  160. 34.66 s Progress: 0 of 6 built, 64 of 97 downloaded from cache (14 downloading)
  161. 34.66 s Downloading cached sqlite-3.50.4-dev from https://cache.nix-ci.com
  162. 34.68 s Progress: 0 of 6 built, 65 of 97 downloaded from cache (14 downloading)
  163. 34.68 s Progress: 0 of 6 built, 66 of 97 downloaded from cache (13 downloading)
  164. 34.68 s Downloading cached perl5.40.0-File-Listing from https://cache.nix-ci.com
  165. 34.68 s Downloading cached perl5.40.0-HTTP-CookieJar from https://cache.nix-ci.com
  166. 34.68 s Downloading cached perl5.40.0-HTTP-Message from https://cache.nix-ci.com
  167. 34.68 s Progress: 0 of 6 built, 67 of 97 downloaded from cache (15 downloading)
  168. 34.68 s Progress: 0 of 6 built, 68 of 97 downloaded from cache (14 downloading)
  169. 34.68 s Downloading cached stdenv-linux from https://cache.nix-ci.com
  170. 34.68 s Progress: 0 of 6 built, 69 of 97 downloaded from cache (14 downloading)
  171. 34.68 s Downloading cached bash-interactive from https://cache.nix-ci.com
  172. 34.68 s Progress: 0 of 6 built, 70 of 97 downloaded from cache (14 downloading)
  173. 34.70 s Progress: 0 of 6 built, 71 of 97 downloaded from cache (13 downloading)
  174. 34.70 s Downloading cached python3 from https://cache.nix-ci.com
  175. 34.71 s Progress: 0 of 6 built, 72 of 97 downloaded from cache (13 downloading)
  176. 34.76 s Progress: 0 of 6 built, 73 of 97 downloaded from cache (12 downloading)
  177. 34.77 s Progress: 0 of 6 built, 74 of 97 downloaded from cache (11 downloading)
  178. 34.77 s Progress: 0 of 6 built, 75 of 97 downloaded from cache (10 downloading)
  179. 34.77 s Progress: 0 of 6 built, 76 of 97 downloaded from cache (9 downloading)
  180. 34.77 s Progress: 0 of 6 built, 77 of 97 downloaded from cache (8 downloading)
  181. 34.77 s Progress: 0 of 6 built, 78 of 97 downloaded from cache (7 downloading)
  182. 34.77 s Progress: 0 of 6 built, 79 of 97 downloaded from cache (6 downloading)
  183. 34.77 s Downloading cached perl5.40.0-HTML-Parser from https://cache.nix-ci.com
  184. 34.77 s Downloading cached perl5.40.0-HTTP-Cookies from https://cache.nix-ci.com
  185. 34.77 s Downloading cached perl5.40.0-HTTP-Daemon from https://cache.nix-ci.com
  186. 34.77 s Downloading cached perl5.40.0-HTTP-Negotiate from https://cache.nix-ci.com
  187. 34.78 s Progress: 0 of 6 built, 80 of 97 downloaded from cache (9 downloading)
  188. 34.81 s Progress: 0 of 5 built, 81 of 97 downloaded from cache (8 downloading)
  189. 34.83 s Progress: 0 of 4 built, 82 of 97 downloaded from cache (7 downloading)
  190. 34.83 s Progress: 0 of 4 built, 83 of 97 downloaded from cache (6 downloading)
  191. 34.84 s Progress: 0 of 4 built, 84 of 97 downloaded from cache (5 downloading)
  192. 34.84 s Progress: 0 of 4 built, 85 of 97 downloaded from cache (4 downloading)
  193. 34.84 s Progress: 0 of 4 built, 86 of 97 downloaded from cache (3 downloading)
  194. 34.84 s Downloading cached perl5.40.0-CGI from https://cache.nix-ci.com
  195. 34.91 s Progress: 0 of 4 built, 87 of 97 downloaded from cache (3 downloading)
  196. 34.91 s Downloading cached perl5.40.0-CGI-Fast from https://cache.nix-ci.com
  197. 34.99 s Progress: 0 of 4 built, 88 of 97 downloaded from cache (3 downloading)
  198. 35.10 s Progress: 0 of 4 built, 89 of 97 downloaded from cache (2 downloading)
  199. 35.10 s Downloading cached icu4c-76.1-dev from https://cache.nix-ci.com
  200. 35.20 s Progress: 0 of 4 built, 90 of 97 downloaded from cache (2 downloading)
  201. 35.20 s Downloading cached nodejs from https://cache.nix-ci.com
  202. 35.45 s Progress: 0 of 4 built, 91 of 97 downloaded from cache (2 downloading)
  203. 35.45 s Downloading cached perl5.40.0-libwww-perl from https://cache.nix-ci.com
  204. 35.49 s Progress: 0 of 4 built, 92 of 97 downloaded from cache (2 downloading)
  205. 35.81 s Progress: 0 of 4 built, 93 of 97 downloaded from cache (1 downloading)
  206. 35.81 s Downloading cached git from https://cache.nix-ci.com
  207. 36.14 s Progress: 0 of 4 built, 94 of 97 downloaded from cache (1 downloading)
  208. 36.14 s Downloading cached prettier from https://cache.nix-ci.com
  209. 36.18 s Progress: 0 of 4 built, 95 of 97 downloaded from cache (1 downloading)
  210. 36.21 s Progress: 0 of 3 built, 96 of 97 downloaded from cache
  211. 36.21 s Downloading cached treefmt.toml from https://cache.nix-ci.com
  212. 36.24 s Progress: 0 of 3 built, 97 of 97 downloaded from cache
  213. 36.29 s Building treefmt
  214. 36.37 s [post-build-hook] Uploading to cachix cache "sellout": /nix/store/ym27pkkkqpacc3hwbh0xsfiry1f0yhbc-treefmt
  215. 48.48 s [post-build-hook] Nothing to push - all store paths are already on Cachix.
  216. 48.51 s [post-build-hook] Uploading to the NixCI cache: /nix/store/ym27pkkkqpacc3hwbh0xsfiry1f0yhbc-treefmt
  217. 48.57 s [post-build-hook] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead
  218. 48.69 s [post-build-hook] copying 0 paths...
  219. 48.74 s [post-build-hook] warning: 'warn-short-path-literals' is deprecated, use 'lint-short-path-literals = ignore' instead
  220. 51.94 s [post-build-hook] copying 0 paths...
  221. 51.98 s Progress: 1 of 3 built, 97 of 97 downloaded from cache
  222. 52.02 s Building treefmt-check
  223. 52.54 s [treefmt-check] treefmt v2.4.0traversed 66 files
  224. 52.54 s [treefmt-check] emitted 52 files for processing
  225. 52.54 s [treefmt-check] formatted 52 files (4 changed) in 391ms
  226. 52.55 s [treefmt-check] M docs/CONTRIBUTING.md
  227. 52.55 s [treefmt-check] M docs/CONTRIBUTING/haskell.md
  228. 52.55 s [treefmt-check] M docs/haskell/release-process.md
  229. 52.55 s [treefmt-check] M docs/haskell/strict-PVP.md
  230. 52.56 s [treefmt-check] diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
  231. 52.56 s [treefmt-check] index 2b499f5..5465a5d 100644
  232. 52.56 s [treefmt-check] --- a/docs/CONTRIBUTING.md
  233. 52.56 s [treefmt-check] +++ b/docs/CONTRIBUTING.md
  234. 52.56 s [treefmt-check] @@ -25,10 +25,10 @@ All contributions are welcome, we love improvements to docs and tests.
  235. 52.56 s [treefmt-check] ### terminology
  236. 52.56 s [treefmt-check]
  237. 52.56 s [treefmt-check] | generic | Haskell | Nix | Rust | versioned |
  238. 52.56 s [treefmt-check] -|------------|---------------|------------|-----------|-----------|
  239. 52.56 s [treefmt-check] -| repository | | | | ✔ |
  240. 52.56 s [treefmt-check] +| ---------- | ------------- | ---------- | --------- | --------- |
  241. 52.56 s [treefmt-check] +| repository | | | | ✔ |
  242. 52.56 s [treefmt-check] | project | Cabal project | flake | workspace | |
  243. 52.56 s [treefmt-check] -| package | Cabal package | derivation | crate | ✔ |
  244. 52.56 s [treefmt-check] +| package | Cabal package | derivation | crate | ✔ |
  245. 52.56 s [treefmt-check] | component | Cabal stanza | | | |
  246. 52.56 s [treefmt-check]
  247. 52.56 s [treefmt-check] There is usually one project per repository, but sometimes a project may be split across multiple repositories. It’s unlikely that more than one project would be in the same repository.
  248. 52.56 s [treefmt-check] diff --git a/docs/CONTRIBUTING/haskell.md b/docs/CONTRIBUTING/haskell.md
  249. 52.56 s [treefmt-check] index d62443d..210aff7 100644
  250. 52.56 s [treefmt-check] --- a/docs/CONTRIBUTING/haskell.md
  251. 52.56 s [treefmt-check] +++ b/docs/CONTRIBUTING/haskell.md
  252. 52.56 s [treefmt-check] @@ -50,7 +50,7 @@ Documentation is very important, but it shouldn’t detract from good naming. Th
  253. 52.56 s [treefmt-check]
  254. 52.56 s [treefmt-check] Documentation is written using [Haddock](https://haskell-haddock.readthedocs.io/), and it’s helpful to add Doctest examples, as described in the “testing” section below.
  255. 52.56 s [treefmt-check]
  256. 52.56 s [treefmt-check] -__NB__: Haddock isn’t Markdown! But the similarities can make it easy to forget sometimes. Please try to review your doc changes using [`cabal haddock-project`](https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-haddock-project) before submitting them.
  257. 52.56 s [treefmt-check] +**NB**: Haddock isn’t Markdown! But the similarities can make it easy to forget sometimes. Please try to review your doc changes using [`cabal haddock-project`](https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-haddock-project) before submitting them.
  258. 52.56 s [treefmt-check]
  259. 52.56 s [treefmt-check] #### guidelines
  260. 52.56 s [treefmt-check]
  261. 52.56 s [treefmt-check] @@ -93,7 +93,7 @@ name foo
  262. 52.56 s [treefmt-check] library
  263. 52.56 s [treefmt-check] ```
  264. 52.56 s [treefmt-check]
  265. 52.56 s [treefmt-check] -``` cabal
  266. 52.56 s [treefmt-check] +```cabal
  267. 52.56 s [treefmt-check] name: foo-hedgehog
  268. 52.56 s [treefmt-check]
  269. 52.56 s [treefmt-check] library
  270. 52.56 s [treefmt-check] diff --git a/docs/haskell/release-process.md b/docs/haskell/release-process.md
  271. 52.56 s [treefmt-check] index c761703..e08874f 100644
  272. 52.56 s [treefmt-check] --- a/docs/haskell/release-process.md
  273. 52.56 s [treefmt-check] +++ b/docs/haskell/release-process.md
  274. 52.56 s [treefmt-check] @@ -20,7 +20,7 @@ Don’t lump documentation & testing improvements into a breaking change just be
  275. 52.56 s [treefmt-check]
  276. 52.56 s [treefmt-check] ### format the PR title as a CHANGELOG entry
  277. 52.56 s [treefmt-check]
  278. 52.56 s [treefmt-check] -__TODO__: How does this work when there are multiple packages?
  279. 52.56 s [treefmt-check] +**TODO**: How does this work when there are multiple packages?
  280. 52.56 s [treefmt-check]
  281. 52.56 s [treefmt-check] ## release updates
  282. 52.56 s [treefmt-check]
  283. 52.56 s [treefmt-check] @@ -37,7 +37,6 @@ In as far as the release is automated, the changes should be made in the merge c
  284. 52.56 s [treefmt-check]
  285. 52.56 s [treefmt-check] [^1]: This is delicate, because the CI build matrix doesn’t do a good job of solving for other versions of local packages.
  286. 52.56 s [treefmt-check]
  287. 52.56 s [treefmt-check] -
  288. 52.56 s [treefmt-check] ## Hackage info
  289. 52.56 s [treefmt-check]
  290. 52.56 s [treefmt-check] Hackage allows you to optionally tag a release as “preferred” or ”deprecated”.
  291. 52.56 s [treefmt-check] diff --git a/docs/haskell/strict-PVP.md b/docs/haskell/strict-PVP.md
  292. 52.56 s [treefmt-check] index 3a74ff8..78079d7 100644
  293. 52.56 s [treefmt-check] --- a/docs/haskell/strict-PVP.md
  294. 52.56 s [treefmt-check] +++ b/docs/haskell/strict-PVP.md
  295. 52.56 s [treefmt-check] @@ -2,10 +2,10 @@
  296. 52.56 s [treefmt-check]
  297. 52.56 s [treefmt-check] This is a versioning system that’s compatible with [the Haskell Package Versioning Policy](https://pvp.haskell.org/), but tries to prevent more issues with dependencies.
  298. 52.56 s [treefmt-check]
  299. 52.56 s [treefmt-check] -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
  300. 52.56 s [treefmt-check] +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
  301. 52.56 s [treefmt-check]
  302. 52.56 s [treefmt-check] 1. TOC
  303. 52.56 s [treefmt-check] -{:toc}
  304. 52.56 s [treefmt-check] + {:toc}
  305. 52.56 s [treefmt-check]
  306. 52.56 s [treefmt-check] ## terminology
  307. 52.56 s [treefmt-check]
  308. 52.56 s [treefmt-check] @@ -54,6 +54,7 @@ This largely follows the [Haskell Package Versioning Policy](https://pvp.haskell
  309. 52.56 s [treefmt-check] The package version always has four components, `A.B.C.D`[^1]. The first three correspond to those required by PVP, while the fourth matches the “patch” component from [Semantic Versioning](https://semver.org/).
  310. 52.56 s [treefmt-check]
  311. 52.56 s [treefmt-check] [^1]: A mnemonic for the version components in strict PVP:
  312. 52.56 s [treefmt-check] +
  313. 52.56 s [treefmt-check] - bumping `A` affects **A**ll dependencies,
  314. 52.56 s [treefmt-check] - bumping `B` **B**reaks something,
  315. 52.56 s [treefmt-check] - bumping `C` is a **C**ompatible change, and
  316. 52.56 s [treefmt-check] @@ -116,11 +117,11 @@ Each of these cases is covered in the following sections with justifications, bu
  317. 52.56 s [treefmt-check] - a “persisting” type or class means that the type or class existed in a release prior to the addition, or continues to exist in the release containing the removal
  318. 52.56 s [treefmt-check]
  319. 52.56 s [treefmt-check] | | add | remove | syntax-only[^2] | note |
  320. 52.56 s [treefmt-check] -|-----------------------------------------:|-------------|---------|-----------------|------------------------------------------------------------------------------------------------------------|
  321. 52.56 s [treefmt-check] -| [`import`](#imports) | `A`/`C`/`D` | `A`/`D` | ✔ | `C` when it’s part of a new module, `D` when there is persisting import for the same module |
  322. 52.56 s [treefmt-check] +| ---------------------------------------: | ----------- | ------- | --------------- | ---------------------------------------------------------------------------------------------------------- |
  323. 52.56 s [treefmt-check] +| [`import`](#imports) | `A`/`C`/`D` | `A`/`D` | ✔ | `C` when it’s part of a new module, `D` when there is persisting import for the same module |
  324. 52.56 s [treefmt-check] | [`instance`](#instances) | `A`/`C` | `A` | | only when applied to persisting types & classes, `C` when it’s part of a new module |
  325. 52.57 s [treefmt-check] -| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  326. 52.57 s [treefmt-check] -| `-Werror` | `A`* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  327. 52.57 s [treefmt-check] +| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  328. 52.57 s [treefmt-check] +| `-Werror` | `A`\* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  329. 52.57 s [treefmt-check] | `-fpackage-trust` | `A` | `D` | | |
  330. 52.57 s [treefmt-check] | [constructor](#constructors) | `B`/`C` | `B` | | only when applied to persisting type, `C` when there were previously no exported constructors for the type |
  331. 52.57 s [treefmt-check] | field | `B` | `B` | | only when applied to persisting type |
  332. 52.57 s [treefmt-check] @@ -137,9 +138,9 @@ Each of these cases is covered in the following sections with justifications, bu
  333. 52.57 s [treefmt-check] | Haddock | `D` | `D` | | |
  334. 52.57 s [treefmt-check]
  335. 52.57 s [treefmt-check] | | tighten | weaken | syntax-only[^2] | note |
  336. 52.57 s [treefmt-check] -|-----------------------------------:|---------|---------|-----------------|------------------------------------------------------------------------------------------|
  337. 52.57 s [treefmt-check] +| ---------------------------------: | ------- | ------- | --------------- | ---------------------------------------------------------------------------------------- |
  338. 52.57 s [treefmt-check] | license | `A` | `C` | | |
  339. 52.57 s [treefmt-check] -| [dependency bound](#dependencies) | `D` | `A`/`D` | ✔ | `A` when new `A` or non-strict `B` version is supported, and for certain other libraries |
  340. 52.57 s [treefmt-check] +| [dependency bound](#dependencies) | `D` | `A`/`D` | ✔ | `A` when new `A` or non-strict `B` version is supported, and for certain other libraries |
  341. 52.57 s [treefmt-check] | [compiler bound](#compiler-bounds) | `B`/`D` | `D` | | `D` when “guarded” by a corresponding non-reinstallable dependency tightening |
  342. 52.57 s [treefmt-check] | [constraint](#constraints) | `B` | `D` | | **TODO**: type variable defaulting may be an issue here |
  343. 52.57 s [treefmt-check] | `type role` | `B` | `D` | ? | “inferred” should be treated as between `representational` and `phantom` |
  344. 52.57 s [treefmt-check] @@ -286,7 +287,7 @@ Haskell does type resolution independently of constraints. It then sees if the t
  345. 52.57 s [treefmt-check]
  346. 52.57 s [treefmt-check] This is a good example of the difference between “additions to the API” and “non-breaking changes to the API”. This makes a function applicable in more situations, but doesn’t add anything to the API.
  347. 52.57 s [treefmt-check]
  348. 52.57 s [treefmt-check] -**FIXME**: I think this might not be true with [type variable defaulting](https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/type_defaulting.html). For example, if you weaken a constraint from `RealFloat` to `Num`, and a consumer is using `default (Natural, Double)`, the switch from resolving `Double` to resolving `Natural` can then introduce a runtime failure when they call `negate`. There are mechanisms to disable defaulting, like `default ()` or requiring `-Werror=type-defaults`, but those must be applied in the consumer, not the definer.
  349. 52.57 s [treefmt-check] +**FIXME**: I think this might not be true with [type variable defaulting](https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/type_defaulting.html). For example, if you weaken a constraint from `RealFloat` to `Num`, and a consumer is using `default (Natural, Double)`, the switch from resolving `Double` to resolving `Natural` can then introduce a runtime failure when they call `negate`. There are mechanisms to disable defaulting, like `default ()` or requiring `-Werror=type-defaults`, but those must be applied in the consumer, not the definer.
  350. 52.57 s [treefmt-check]
  351. 52.57 s [treefmt-check] ## incompatible extensions
  352. 52.57 s [treefmt-check]
  353. 52.59 s Progress: 1 of 2 built (1 failed), 97 of 97 downloaded from cache
  354. 52.60 s Cannot build '/nix/store/cphzr48kdqahlws1qlbqd4mfdd4018d6-treefmt-check.drv'.
  355. 52.60 s Reason: builder failed with exit code 1.
  356. 52.60 s Output paths:
  357. 52.60 s /nix/store/s4bvgaq37kvkamvw1x93dnzm077g0wfq-treefmt-check
  358. 52.60 s Last 130 log lines:
  359. 52.60 s > treefmt v2.4.0traversed 66 files
  360. 52.60 s > emitted 52 files for processing
  361. 52.60 s > formatted 52 files (4 changed) in 391ms
  362. 52.60 s > M docs/CONTRIBUTING.md
  363. 52.60 s > M docs/CONTRIBUTING/haskell.md
  364. 52.60 s > M docs/haskell/release-process.md
  365. 52.60 s > M docs/haskell/strict-PVP.md
  366. 52.60 s > diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
  367. 52.60 s > index 2b499f5..5465a5d 100644
  368. 52.60 s > --- a/docs/CONTRIBUTING.md
  369. 52.60 s > +++ b/docs/CONTRIBUTING.md
  370. 52.60 s > @@ -25,10 +25,10 @@ All contributions are welcome, we love improvements to docs and tests.
  371. 52.60 s > ### terminology
  372. 52.60 s >
  373. 52.60 s > | generic | Haskell | Nix | Rust | versioned |
  374. 52.60 s > -|------------|---------------|------------|-----------|-----------|
  375. 52.60 s > -| repository | | | | ✔ |
  376. 52.60 s > +| ---------- | ------------- | ---------- | --------- | --------- |
  377. 52.60 s > +| repository | | | | ✔ |
  378. 52.60 s > | project | Cabal project | flake | workspace | |
  379. 52.60 s > -| package | Cabal package | derivation | crate | ✔ |
  380. 52.60 s > +| package | Cabal package | derivation | crate | ✔ |
  381. 52.60 s > | component | Cabal stanza | | | |
  382. 52.60 s >
  383. 52.60 s > There is usually one project per repository, but sometimes a project may be split across multiple repositories. It’s unlikely that more than one project would be in the same repository.
  384. 52.60 s > diff --git a/docs/CONTRIBUTING/haskell.md b/docs/CONTRIBUTING/haskell.md
  385. 52.60 s > index d62443d..210aff7 100644
  386. 52.60 s > --- a/docs/CONTRIBUTING/haskell.md
  387. 52.60 s > +++ b/docs/CONTRIBUTING/haskell.md
  388. 52.60 s > @@ -50,7 +50,7 @@ Documentation is very important, but it shouldn’t detract from good naming. Th
  389. 52.60 s >
  390. 52.60 s > Documentation is written using [Haddock](https://haskell-haddock.readthedocs.io/), and it’s helpful to add Doctest examples, as described in the “testing” section below.
  391. 52.60 s >
  392. 52.60 s > -__NB__: Haddock isn’t Markdown! But the similarities can make it easy to forget sometimes. Please try to review your doc changes using [`cabal haddock-project`](https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-haddock-project) before submitting them.
  393. 52.60 s > +**NB**: Haddock isn’t Markdown! But the similarities can make it easy to forget sometimes. Please try to review your doc changes using [`cabal haddock-project`](https://cabal.readthedocs.io/en/stable/cabal-commands.html#cabal-haddock-project) before submitting them.
  394. 52.60 s >
  395. 52.60 s > #### guidelines
  396. 52.60 s >
  397. 52.60 s > @@ -93,7 +93,7 @@ name foo
  398. 52.60 s > library
  399. 52.60 s > ```
  400. 52.60 s >
  401. 52.60 s > -``` cabal
  402. 52.60 s > +```cabal
  403. 52.60 s > name: foo-hedgehog
  404. 52.60 s >
  405. 52.60 s > library
  406. 52.60 s > diff --git a/docs/haskell/release-process.md b/docs/haskell/release-process.md
  407. 52.60 s > index c761703..e08874f 100644
  408. 52.60 s > --- a/docs/haskell/release-process.md
  409. 52.60 s > +++ b/docs/haskell/release-process.md
  410. 52.60 s > @@ -20,7 +20,7 @@ Don’t lump documentation & testing improvements into a breaking change just be
  411. 52.60 s >
  412. 52.60 s > ### format the PR title as a CHANGELOG entry
  413. 52.60 s >
  414. 52.60 s > -__TODO__: How does this work when there are multiple packages?
  415. 52.60 s > +**TODO**: How does this work when there are multiple packages?
  416. 52.60 s >
  417. 52.60 s > ## release updates
  418. 52.60 s >
  419. 52.60 s > @@ -37,7 +37,6 @@ In as far as the release is automated, the changes should be made in the merge c
  420. 52.60 s >
  421. 52.60 s > [^1]: This is delicate, because the CI build matrix doesn’t do a good job of solving for other versions of local packages.
  422. 52.60 s >
  423. 52.60 s > -
  424. 52.60 s > ## Hackage info
  425. 52.60 s >
  426. 52.60 s > Hackage allows you to optionally tag a release as “preferred” or ”deprecated”.
  427. 52.60 s > diff --git a/docs/haskell/strict-PVP.md b/docs/haskell/strict-PVP.md
  428. 52.60 s > index 3a74ff8..78079d7 100644
  429. 52.60 s > --- a/docs/haskell/strict-PVP.md
  430. 52.60 s > +++ b/docs/haskell/strict-PVP.md
  431. 52.60 s > @@ -2,10 +2,10 @@
  432. 52.60 s >
  433. 52.60 s > This is a versioning system that’s compatible with [the Haskell Package Versioning Policy](https://pvp.haskell.org/), but tries to prevent more issues with dependencies.
  434. 52.60 s >
  435. 52.60 s > -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
  436. 52.60 s > +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119).
  437. 52.60 s >
  438. 52.60 s > 1. TOC
  439. 52.60 s > -{:toc}
  440. 52.60 s > + {:toc}
  441. 52.60 s >
  442. 52.60 s > ## terminology
  443. 52.60 s >
  444. 52.60 s > @@ -54,6 +54,7 @@ This largely follows the [Haskell Package Versioning Policy](https://pvp.haskell
  445. 52.60 s > The package version always has four components, `A.B.C.D`[^1]. The first three correspond to those required by PVP, while the fourth matches the “patch” component from [Semantic Versioning](https://semver.org/).
  446. 52.60 s >
  447. 52.60 s > [^1]: A mnemonic for the version components in strict PVP:
  448. 52.60 s > +
  449. 52.60 s > - bumping `A` affects **A**ll dependencies,
  450. 52.60 s > - bumping `B` **B**reaks something,
  451. 52.60 s > - bumping `C` is a **C**ompatible change, and
  452. 52.60 s > @@ -116,11 +117,11 @@ Each of these cases is covered in the following sections with justifications, bu
  453. 52.60 s > - a “persisting” type or class means that the type or class existed in a release prior to the addition, or continues to exist in the release containing the removal
  454. 52.60 s >
  455. 52.60 s > | | add | remove | syntax-only[^2] | note |
  456. 52.60 s > -|-----------------------------------------:|-------------|---------|-----------------|------------------------------------------------------------------------------------------------------------|
  457. 52.60 s > -| [`import`](#imports) | `A`/`C`/`D` | `A`/`D` | ✔ | `C` when it’s part of a new module, `D` when there is persisting import for the same module |
  458. 52.60 s > +| ---------------------------------------: | ----------- | ------- | --------------- | ---------------------------------------------------------------------------------------------------------- |
  459. 52.60 s > +| [`import`](#imports) | `A`/`C`/`D` | `A`/`D` | ✔ | `C` when it’s part of a new module, `D` when there is persisting import for the same module |
  460. 52.60 s > | [`instance`](#instances) | `A`/`C` | `A` | | only when applied to persisting types & classes, `C` when it’s part of a new module |
  461. 52.60 s > -| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  462. 52.60 s > -| `-Werror` | `A`* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  463. 52.60 s > +| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  464. 52.60 s > +| `-Werror` | `A`\* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  465. 52.60 s > | `-fpackage-trust` | `A` | `D` | | |
  466. 52.60 s > | [constructor](#constructors) | `B`/`C` | `B` | | only when applied to persisting type, `C` when there were previously no exported constructors for the type |
  467. 52.60 s > | field | `B` | `B` | | only when applied to persisting type |
  468. 52.60 s > @@ -137,9 +138,9 @@ Each of these cases is covered in the following sections with justifications, bu
  469. 52.60 s > | Haddock | `D` | `D` | | |
  470. 52.60 s >
  471. 52.60 s > | | tighten | weaken | syntax-only[^2] | note |
  472. 52.60 s > -|-----------------------------------:|---------|---------|-----------------|------------------------------------------------------------------------------------------|
  473. 52.60 s > +| ---------------------------------: | ------- | ------- | --------------- | ---------------------------------------------------------------------------------------- |
  474. 52.60 s > | license | `A` | `C` | | |
  475. 52.60 s > -| [dependency bound](#dependencies) | `D` | `A`/`D` | ✔ | `A` when new `A` or non-strict `B` version is supported, and for certain other libraries |
  476. 52.60 s > +| [dependency bound](#dependencies) | `D` | `A`/`D` | ✔ | `A` when new `A` or non-strict `B` version is supported, and for certain other libraries |
  477. 52.60 s > | [compiler bound](#compiler-bounds) | `B`/`D` | `D` | | `D` when “guarded” by a corresponding non-reinstallable dependency tightening |
  478. 52.60 s > | [constraint](#constraints) | `B` | `D` | | **TODO**: type variable defaulting may be an issue here |
  479. 52.60 s > | `type role` | `B` | `D` | ? | “inferred” should be treated as between `representational` and `phantom` |
  480. 52.60 s > @@ -286,7 +287,7 @@ Haskell does type resolution independently of constraints. It then sees if the t
  481. 52.60 s >
  482. 52.60 s > This is a good example of the difference between “additions to the API” and “non-breaking changes to the API”. This makes a function applicable in more situations, but doesn’t add anything to the API.
  483. 52.60 s >
  484. 52.60 s > -**FIXME**: I think this might not be true with [type variable defaulting](https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/type_defaulting.html). For example, if you weaken a constraint from `RealFloat` to `Num`, and a consumer is using `default (Natural, Double)`, the switch from resolving `Double` to resolving `Natural` can then introduce a runtime failure when they call `negate`. There are mechanisms to disable defaulting, like `default ()` or requiring `-Werror=type-defaults`, but those must be applied in the consumer, not the definer.
  485. 52.60 s > +**FIXME**: I think this might not be true with [type variable defaulting](https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/type_defaulting.html). For example, if you weaken a constraint from `RealFloat` to `Num`, and a consumer is using `default (Natural, Double)`, the switch from resolving `Double` to resolving `Natural` can then introduce a runtime failure when they call `negate`. There are mechanisms to disable defaulting, like `default ()` or requiring `-Werror=type-defaults`, but those must be applied in the consumer, not the definer.
  486. 52.60 s >
  487. 52.60 s > ## incompatible extensions
  488. 52.60 s >
  489. 52.60 s For full logs, run:
  490. 52.60 s nix log /nix/store/cphzr48kdqahlws1qlbqd4mfdd4018d6-treefmt-check.drv