build checks.x86_64-linux.formatter

  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=f6b35bb45791aad5df3ee05b49627d7bda9a8291#checks.x86_64-linux.formatter --print-build-logs
  2. 0.09 s warning: ignoring untrusted flake configuration setting 'allow-import-from-derivation'.
  3. 0.09 s Pass '--accept-flake-config' to trust it
  4. 0.09 s warning: ignoring untrusted flake configuration setting 'extra-experimental-features'.
  5. 0.09 s Pass '--accept-flake-config' to trust it
  6. 0.09 s warning: ignoring untrusted flake configuration setting 'extra-substituters'.
  7. 0.09 s Pass '--accept-flake-config' to trust it
  8. 0.09 s warning: ignoring untrusted flake configuration setting 'extra-trusted-public-keys'.
  9. 0.09 s Pass '--accept-flake-config' to trust it
  10. 0.09 s warning: ignoring untrusted flake configuration setting 'sandbox'.
  11. 0.09 s Pass '--accept-flake-config' to trust it
  12. 0.09 s warning: ignoring untrusted flake configuration setting 'use-registries'.
  13. 0.09 s Pass '--accept-flake-config' to trust it
  14. 2.04 s
  15. 2.16 s Substituting git-lfs from https://cache.nix-ci.com
  16. 2.36 s Progress: 0 of 2 built, 1 of 1 fetched
  17. 2.40 s Building treefmt-check
  18. 2.85 s [treefmt-check] treefmt v2.4.0traversed 66 files
  19. 2.85 s [treefmt-check] emitted 52 files for processing
  20. 2.85 s [treefmt-check] formatted 52 files (4 changed) in 337ms
  21. 2.86 s [treefmt-check] M docs/CONTRIBUTING.md
  22. 2.86 s [treefmt-check] M docs/CONTRIBUTING/haskell.md
  23. 2.86 s [treefmt-check] M docs/haskell-release-process.md
  24. 2.86 s [treefmt-check] M docs/haskell-strict-PVP.md
  25. 2.87 s [treefmt-check] diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
  26. 2.87 s [treefmt-check] index 2b499f5..5465a5d 100644
  27. 2.87 s [treefmt-check] --- a/docs/CONTRIBUTING.md
  28. 2.87 s [treefmt-check] +++ b/docs/CONTRIBUTING.md
  29. 2.87 s [treefmt-check] @@ -25,10 +25,10 @@ All contributions are welcome, we love improvements to docs and tests.
  30. 2.87 s [treefmt-check] ### terminology
  31. 2.87 s [treefmt-check]
  32. 2.87 s [treefmt-check] | generic | Haskell | Nix | Rust | versioned |
  33. 2.87 s [treefmt-check] -|------------|---------------|------------|-----------|-----------|
  34. 2.87 s [treefmt-check] -| repository | | | | ✔ |
  35. 2.87 s [treefmt-check] +| ---------- | ------------- | ---------- | --------- | --------- |
  36. 2.87 s [treefmt-check] +| repository | | | | ✔ |
  37. 2.87 s [treefmt-check] | project | Cabal project | flake | workspace | |
  38. 2.87 s [treefmt-check] -| package | Cabal package | derivation | crate | ✔ |
  39. 2.87 s [treefmt-check] +| package | Cabal package | derivation | crate | ✔ |
  40. 2.87 s [treefmt-check] | component | Cabal stanza | | | |
  41. 2.87 s [treefmt-check]
  42. 2.87 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.
  43. 2.87 s [treefmt-check] diff --git a/docs/CONTRIBUTING/haskell.md b/docs/CONTRIBUTING/haskell.md
  44. 2.87 s [treefmt-check] index 963d786..4592132 100644
  45. 2.87 s [treefmt-check] --- a/docs/CONTRIBUTING/haskell.md
  46. 2.87 s [treefmt-check] +++ b/docs/CONTRIBUTING/haskell.md
  47. 2.87 s [treefmt-check] @@ -50,7 +50,7 @@ Documentation is very important, but it shouldn’t detract from good naming. Th
  48. 2.87 s [treefmt-check]
  49. 2.87 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.
  50. 2.87 s [treefmt-check]
  51. 2.87 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.
  52. 2.87 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.
  53. 2.87 s [treefmt-check]
  54. 2.87 s [treefmt-check] #### guidelines
  55. 2.87 s [treefmt-check]
  56. 2.87 s [treefmt-check] @@ -93,7 +93,7 @@ name foo
  57. 2.87 s [treefmt-check] library
  58. 2.87 s [treefmt-check] ```
  59. 2.87 s [treefmt-check]
  60. 2.87 s [treefmt-check] -``` cabal
  61. 2.87 s [treefmt-check] +```cabal
  62. 2.87 s [treefmt-check] name: foo-hedgehog
  63. 2.87 s [treefmt-check]
  64. 2.87 s [treefmt-check] library
  65. 2.87 s [treefmt-check] diff --git a/docs/haskell-release-process.md b/docs/haskell-release-process.md
  66. 2.87 s [treefmt-check] index c761703..e08874f 100644
  67. 2.87 s [treefmt-check] --- a/docs/haskell-release-process.md
  68. 2.87 s [treefmt-check] +++ b/docs/haskell-release-process.md
  69. 2.87 s [treefmt-check] @@ -20,7 +20,7 @@ Don’t lump documentation & testing improvements into a breaking change just be
  70. 2.87 s [treefmt-check]
  71. 2.87 s [treefmt-check] ### format the PR title as a CHANGELOG entry
  72. 2.87 s [treefmt-check]
  73. 2.87 s [treefmt-check] -__TODO__: How does this work when there are multiple packages?
  74. 2.87 s [treefmt-check] +**TODO**: How does this work when there are multiple packages?
  75. 2.87 s [treefmt-check]
  76. 2.87 s [treefmt-check] ## release updates
  77. 2.87 s [treefmt-check]
  78. 2.87 s [treefmt-check] @@ -37,7 +37,6 @@ In as far as the release is automated, the changes should be made in the merge c
  79. 2.87 s [treefmt-check]
  80. 2.87 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.
  81. 2.87 s [treefmt-check]
  82. 2.87 s [treefmt-check] -
  83. 2.87 s [treefmt-check] ## Hackage info
  84. 2.87 s [treefmt-check]
  85. 2.87 s [treefmt-check] Hackage allows you to optionally tag a release as “preferred” or ”deprecated”.
  86. 2.87 s [treefmt-check] diff --git a/docs/haskell-strict-PVP.md b/docs/haskell-strict-PVP.md
  87. 2.87 s [treefmt-check] index 3a74ff8..78079d7 100644
  88. 2.87 s [treefmt-check] --- a/docs/haskell-strict-PVP.md
  89. 2.87 s [treefmt-check] +++ b/docs/haskell-strict-PVP.md
  90. 2.87 s [treefmt-check] @@ -2,10 +2,10 @@
  91. 2.87 s [treefmt-check]
  92. 2.87 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.
  93. 2.87 s [treefmt-check]
  94. 2.87 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).
  95. 2.87 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).
  96. 2.87 s [treefmt-check]
  97. 2.87 s [treefmt-check] 1. TOC
  98. 2.87 s [treefmt-check] -{:toc}
  99. 2.87 s [treefmt-check] + {:toc}
  100. 2.87 s [treefmt-check]
  101. 2.87 s [treefmt-check] ## terminology
  102. 2.87 s [treefmt-check]
  103. 2.87 s [treefmt-check] @@ -54,6 +54,7 @@ This largely follows the [Haskell Package Versioning Policy](https://pvp.haskell
  104. 2.87 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/).
  105. 2.87 s [treefmt-check]
  106. 2.87 s [treefmt-check] [^1]: A mnemonic for the version components in strict PVP:
  107. 2.87 s [treefmt-check] +
  108. 2.87 s [treefmt-check] - bumping `A` affects **A**ll dependencies,
  109. 2.87 s [treefmt-check] - bumping `B` **B**reaks something,
  110. 2.87 s [treefmt-check] - bumping `C` is a **C**ompatible change, and
  111. 2.87 s [treefmt-check] @@ -116,11 +117,11 @@ Each of these cases is covered in the following sections with justifications, bu
  112. 2.87 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
  113. 2.87 s [treefmt-check]
  114. 2.87 s [treefmt-check] | | add | remove | syntax-only[^2] | note |
  115. 2.87 s [treefmt-check] -|-----------------------------------------:|-------------|---------|-----------------|------------------------------------------------------------------------------------------------------------|
  116. 2.87 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 |
  117. 2.87 s [treefmt-check] +| ---------------------------------------: | ----------- | ------- | --------------- | ---------------------------------------------------------------------------------------------------------- |
  118. 2.87 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 |
  119. 2.87 s [treefmt-check] | [`instance`](#instances) | `A`/`C` | `A` | | only when applied to persisting types & classes, `C` when it’s part of a new module |
  120. 2.87 s [treefmt-check] -| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  121. 2.87 s [treefmt-check] -| `-Werror` | `A`* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  122. 2.87 s [treefmt-check] +| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  123. 2.87 s [treefmt-check] +| `-Werror` | `A`\* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  124. 2.87 s [treefmt-check] | `-fpackage-trust` | `A` | `D` | | |
  125. 2.87 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 |
  126. 2.87 s [treefmt-check] | field | `B` | `B` | | only when applied to persisting type |
  127. 2.87 s [treefmt-check] @@ -137,9 +138,9 @@ Each of these cases is covered in the following sections with justifications, bu
  128. 2.87 s [treefmt-check] | Haddock | `D` | `D` | | |
  129. 2.87 s [treefmt-check]
  130. 2.87 s [treefmt-check] | | tighten | weaken | syntax-only[^2] | note |
  131. 2.87 s [treefmt-check] -|-----------------------------------:|---------|---------|-----------------|------------------------------------------------------------------------------------------|
  132. 2.87 s [treefmt-check] +| ---------------------------------: | ------- | ------- | --------------- | ---------------------------------------------------------------------------------------- |
  133. 2.87 s [treefmt-check] | license | `A` | `C` | | |
  134. 2.87 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 |
  135. 2.88 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 |
  136. 2.88 s [treefmt-check] | [compiler bound](#compiler-bounds) | `B`/`D` | `D` | | `D` when “guarded” by a corresponding non-reinstallable dependency tightening |
  137. 2.88 s [treefmt-check] | [constraint](#constraints) | `B` | `D` | | **TODO**: type variable defaulting may be an issue here |
  138. 2.88 s [treefmt-check] | `type role` | `B` | `D` | ? | “inferred” should be treated as between `representational` and `phantom` |
  139. 2.88 s [treefmt-check] @@ -286,7 +287,7 @@ Haskell does type resolution independently of constraints. It then sees if the t
  140. 2.88 s [treefmt-check]
  141. 2.88 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.
  142. 2.88 s [treefmt-check]
  143. 2.88 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.
  144. 2.88 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.
  145. 2.88 s [treefmt-check]
  146. 2.88 s [treefmt-check] ## incompatible extensions
  147. 2.88 s [treefmt-check]
  148. 2.89 s Progress: 0 of 1 built (1 failed), 1 of 1 fetched
  149. 2.90 s Cannot build '/nix/store/frnlvb7k9m08i4ln26r9dmp09rf9p7pl-treefmt-check.drv'.
  150. 2.90 s Reason: builder failed with exit code 1.
  151. 2.90 s Output paths:
  152. 2.90 s /nix/store/58c5vcv88kilhkdqpif4cyrri1y00wmv-treefmt-check
  153. 2.90 s Last 130 log lines:
  154. 2.90 s > treefmt v2.4.0traversed 66 files
  155. 2.90 s > emitted 52 files for processing
  156. 2.90 s > formatted 52 files (4 changed) in 337ms
  157. 2.90 s > M docs/CONTRIBUTING.md
  158. 2.90 s > M docs/CONTRIBUTING/haskell.md
  159. 2.90 s > M docs/haskell-release-process.md
  160. 2.90 s > M docs/haskell-strict-PVP.md
  161. 2.90 s > diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
  162. 2.90 s > index 2b499f5..5465a5d 100644
  163. 2.90 s > --- a/docs/CONTRIBUTING.md
  164. 2.90 s > +++ b/docs/CONTRIBUTING.md
  165. 2.90 s > @@ -25,10 +25,10 @@ All contributions are welcome, we love improvements to docs and tests.
  166. 2.90 s > ### terminology
  167. 2.90 s >
  168. 2.90 s > | generic | Haskell | Nix | Rust | versioned |
  169. 2.90 s > -|------------|---------------|------------|-----------|-----------|
  170. 2.90 s > -| repository | | | | ✔ |
  171. 2.90 s > +| ---------- | ------------- | ---------- | --------- | --------- |
  172. 2.90 s > +| repository | | | | ✔ |
  173. 2.90 s > | project | Cabal project | flake | workspace | |
  174. 2.90 s > -| package | Cabal package | derivation | crate | ✔ |
  175. 2.90 s > +| package | Cabal package | derivation | crate | ✔ |
  176. 2.90 s > | component | Cabal stanza | | | |
  177. 2.90 s >
  178. 2.90 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.
  179. 2.90 s > diff --git a/docs/CONTRIBUTING/haskell.md b/docs/CONTRIBUTING/haskell.md
  180. 2.90 s > index 963d786..4592132 100644
  181. 2.90 s > --- a/docs/CONTRIBUTING/haskell.md
  182. 2.90 s > +++ b/docs/CONTRIBUTING/haskell.md
  183. 2.90 s > @@ -50,7 +50,7 @@ Documentation is very important, but it shouldn’t detract from good naming. Th
  184. 2.90 s >
  185. 2.90 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.
  186. 2.90 s >
  187. 2.90 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.
  188. 2.90 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.
  189. 2.90 s >
  190. 2.90 s > #### guidelines
  191. 2.90 s >
  192. 2.90 s > @@ -93,7 +93,7 @@ name foo
  193. 2.90 s > library
  194. 2.90 s > ```
  195. 2.90 s >
  196. 2.90 s > -``` cabal
  197. 2.90 s > +```cabal
  198. 2.90 s > name: foo-hedgehog
  199. 2.90 s >
  200. 2.90 s > library
  201. 2.90 s > diff --git a/docs/haskell-release-process.md b/docs/haskell-release-process.md
  202. 2.90 s > index c761703..e08874f 100644
  203. 2.90 s > --- a/docs/haskell-release-process.md
  204. 2.90 s > +++ b/docs/haskell-release-process.md
  205. 2.90 s > @@ -20,7 +20,7 @@ Don’t lump documentation & testing improvements into a breaking change just be
  206. 2.90 s >
  207. 2.90 s > ### format the PR title as a CHANGELOG entry
  208. 2.90 s >
  209. 2.90 s > -__TODO__: How does this work when there are multiple packages?
  210. 2.90 s > +**TODO**: How does this work when there are multiple packages?
  211. 2.90 s >
  212. 2.90 s > ## release updates
  213. 2.90 s >
  214. 2.90 s > @@ -37,7 +37,6 @@ In as far as the release is automated, the changes should be made in the merge c
  215. 2.90 s >
  216. 2.90 s > [^1]: This is delicate, because the CI build matrix doesn’t do a good job of solving for other versions of local packages.
  217. 2.90 s >
  218. 2.90 s > -
  219. 2.90 s > ## Hackage info
  220. 2.90 s >
  221. 2.90 s > Hackage allows you to optionally tag a release as “preferred” or ”deprecated”.
  222. 2.90 s > diff --git a/docs/haskell-strict-PVP.md b/docs/haskell-strict-PVP.md
  223. 2.90 s > index 3a74ff8..78079d7 100644
  224. 2.90 s > --- a/docs/haskell-strict-PVP.md
  225. 2.90 s > +++ b/docs/haskell-strict-PVP.md
  226. 2.90 s > @@ -2,10 +2,10 @@
  227. 2.90 s >
  228. 2.90 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.
  229. 2.90 s >
  230. 2.90 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).
  231. 2.90 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).
  232. 2.90 s >
  233. 2.90 s > 1. TOC
  234. 2.90 s > -{:toc}
  235. 2.90 s > + {:toc}
  236. 2.90 s >
  237. 2.90 s > ## terminology
  238. 2.90 s >
  239. 2.90 s > @@ -54,6 +54,7 @@ This largely follows the [Haskell Package Versioning Policy](https://pvp.haskell
  240. 2.90 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/).
  241. 2.90 s >
  242. 2.90 s > [^1]: A mnemonic for the version components in strict PVP:
  243. 2.90 s > +
  244. 2.90 s > - bumping `A` affects **A**ll dependencies,
  245. 2.90 s > - bumping `B` **B**reaks something,
  246. 2.90 s > - bumping `C` is a **C**ompatible change, and
  247. 2.90 s > @@ -116,11 +117,11 @@ Each of these cases is covered in the following sections with justifications, bu
  248. 2.90 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
  249. 2.90 s >
  250. 2.90 s > | | add | remove | syntax-only[^2] | note |
  251. 2.90 s > -|-----------------------------------------:|-------------|---------|-----------------|------------------------------------------------------------------------------------------------------------|
  252. 2.90 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 |
  253. 2.90 s > +| ---------------------------------------: | ----------- | ------- | --------------- | ---------------------------------------------------------------------------------------------------------- |
  254. 2.90 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 |
  255. 2.90 s > | [`instance`](#instances) | `A`/`C` | `A` | | only when applied to persisting types & classes, `C` when it’s part of a new module |
  256. 2.90 s > -| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  257. 2.90 s > -| `-Werror` | `A`* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  258. 2.90 s > +| [`module`](#modules) | `C` | `A`/`B` | ✔ | `B` when the removed module had _zero_ imports |
  259. 2.90 s > +| `-Werror` | `A`\* | `D` | | **NB**: If you use `-Werror`, any change to the package is an `A` change |
  260. 2.90 s > | `-fpackage-trust` | `A` | `D` | | |
  261. 2.90 s > | [constructor](#constructors) | `B`/`C` | `B` | | only when applied to persisting type, `C` when there were previously no exported constructors for the type |
  262. 2.90 s > | field | `B` | `B` | | only when applied to persisting type |
  263. 2.90 s > @@ -137,9 +138,9 @@ Each of these cases is covered in the following sections with justifications, bu
  264. 2.90 s > | Haddock | `D` | `D` | | |
  265. 2.90 s >
  266. 2.90 s > | | tighten | weaken | syntax-only[^2] | note |
  267. 2.90 s > -|-----------------------------------:|---------|---------|-----------------|------------------------------------------------------------------------------------------|
  268. 2.90 s > +| ---------------------------------: | ------- | ------- | --------------- | ---------------------------------------------------------------------------------------- |
  269. 2.90 s > | license | `A` | `C` | | |
  270. 2.90 s > -| [dependency bound](#dependencies) | `D` | `A`/`D` | ✔ | `A` when new `A` or non-strict `B` version is supported, and for certain other libraries |
  271. 2.90 s > +| [dependency bound](#dependencies) | `D` | `A`/`D` | ✔ | `A` when new `A` or non-strict `B` version is supported, and for certain other libraries |
  272. 2.90 s > | [compiler bound](#compiler-bounds) | `B`/`D` | `D` | | `D` when “guarded” by a corresponding non-reinstallable dependency tightening |
  273. 2.90 s > | [constraint](#constraints) | `B` | `D` | | **TODO**: type variable defaulting may be an issue here |
  274. 2.90 s > | `type role` | `B` | `D` | ? | “inferred” should be treated as between `representational` and `phantom` |
  275. 2.90 s > @@ -286,7 +287,7 @@ Haskell does type resolution independently of constraints. It then sees if the t
  276. 2.90 s >
  277. 2.90 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.
  278. 2.90 s >
  279. 2.90 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.
  280. 2.90 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.
  281. 2.90 s >
  282. 2.90 s > ## incompatible extensions
  283. 2.90 s >
  284. 2.90 s For full logs, run:
  285. 2.90 s nix log /nix/store/frnlvb7k9m08i4ln26r9dmp09rf9p7pl-treefmt-check.drv