-
Notifications
You must be signed in to change notification settings - Fork 114
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Strong upperbounds seem to be the cause of major pain in the depency tool chain #544
Comments
If in the world (and programming) there were no reverse compatibility issues - the Haskell ecosystem requirement for, as you say, strong upper bounds wouldn't be needed. To not have upper bounds we can just drop But the compatibility breakage is a thing - so protocol to handle them is needed. And it seems logical that developers can/should track/be aware of breakages, be able to control them. Haskell ecosystem and packages follow "Haskell Package Versioning Policy". And by it - the changes that breakage changes are the main cause of second point number change, aka AFAIK, in Cabal
So, HNix already has all dependencies adhere to the "Haskell Package Versioning Policy". The main pain point of HNix in the upper bounds versions of dependencies - is that they are not processed/tested/accepted in the time window in which downstream stops supporting old dependency versions and so downstream builds start to fail. If relying on Cabal - there is no escaping that version policy and follow it. If the project package implemented directly for other packaging language & toolchain - that it may bend the rules somewhat. If HNix was not using If you are interested in some dependency management changes & making the Nix building process more modular - there were some recent messages on HNix Gitter. |
@Anton-Latukha Thanks for your detailed reply. Just to confirm my (mis)understanding if In other words, the latest What about |
@Anton-Latukha I agree about the risk of breaking changes from 1.2.x to 1.3.x but your assertion about |
Yes. By convention I remember discussions like this when Cabal 2.0.0 arrived, it was a frequent topic. From answering your issue, I derived request: #545 |
If you read (mainly observe the algorithm picture) the policy - it is pretty simple and clear algorithm. And then you just need a little trust - everyone abides that policy in Haskell packaging, everyone puts the same meaning in the versioning of first two dot positions.
|
@Anton-Latukha I understand that part. I am still not convinced that using I am really sorry to bother you with this ;-) Gitter is probably a better medium. |
It is syntactic sugar to place a strong upper bound according to the "Haskell Package Versioning Policy" (PVP).
For historical reference, we can also look at old Stack discussion on this: commercialhaskell/stack#3464 |
@Anton-Latukha Thanks for the link. I can see the discussion was dense. I am only an external user here (and not too familiar with recent Haskell idiom). I can't help thinking if |
I also was puzzled by it when it was introduced. Thank you for giving a contributing effort here. |
You can always use Refer to the Haskell documentation on how to override packages https://nixos.org/nixpkgs/manual/#haskell |
Yes, it is possible. I just hoped that John would show up. It is strange and embarrassing to advise in a project related thread to start using an interpreter and package manager by jailbreaking it in its language its package. It even can be seen as - takes courage and honesty to state helplessness. I had a similar helplessness experience from the other side of the situation while fixing the Nix installer. Now I learned to just be calm, it happens. Owner of repository and code can make anything he wants with it. |
I might be completely wrong but I am wondering if the use of strong upperbound constraints is not causing a bunch of annoyance for the indirect usages of
hnix
(dhall-to-nix, ...
)For instance the upper bound on pretty-show broke the package currently on nixos unstable (it is also broken in stable releases such as 19.09 or 20.03 because of pretty-printer this time):
https://github.com/haskell-nix/hnix/blob/master/hnix.cabal#L918
Is there any reason why caret-style version operator are not used ? Would you accept a PR that does use them ?
The text was updated successfully, but these errors were encountered: