Comments (7)
I'm the author of Updo. While Updo can work by taking resolvers straight from stackage, having to download a stackage resolver's cabal.config
manually and then edit it when there is a version conflict is probably the biggest ask of users of that tool. This is the last step, the "Fixup Unsatisfiable Version Constraints" step in introducing Updo to a project.
from cabal.
Few counterpoints:
-
constraints
are not only version constraints, e.g. also flags and these are very useful to local packages. And maybe eventually we get more types of constraints.- related: we need to solve for local packages's automatic flags
-
Having equality constraints is not the only way to specify a "snapshot". Having a bunch of
^>=
constraints is a viable option, which I prefer using. I like such "soft" snapshots: they barely ever break, but I do get new minor versions in. -
And again, having (manual)
flags
specified in a snapshot is actually a MUST, but these may need to be override for snapshots (and this applies to Stackage snapshots).
from cabal.
Great! And we can finally close #7556, I assume.
from cabal.
Perhaps the scope of this enhancement should grow to have == x.y.z
versions override installed
versions?
from cabal.
I think we should be able to address the problem of "overriding a package version while using a stackage snapshot" in a different way, and IMHO more principled.
Rather than introducing a "override" semantic to constraints:
, the right thing to do would be to pick some packages and solve the rest. I am not sure about the effort required to implement this but it should at least be assessed before extending constraints:
.
PS: I think this is basically how extra-packages:
works. I need to check.
from cabal.
I think that it could work if constraints:
didn't apply to project local packages. Which is something that could make sense independently since project local packages are fixed. Unfortunately the implementation seems to use constraints for everything (including specifying that the local package "pkg-a" has to come from "./pkg-a.cabal").
Just off the top of my head, maybe rather than solving for the targets we could solve only for the targets dependencies? this would leave project local packages alone. 🤷
from cabal.
The reason I think that having overridable constraints is important is because it does not just solve the problem of overriding a package version while using a stackage snapshot
but it solves many possible problems. And, if done correctly, not just making constraints able to be overridden, but anything in a cabal.project file, does so uniformly. So in that sense I think it is the clear and principled solution.
As soon as we have package imports and conditionals, we hit the issue -- we want to import something that sets a bunch of stuff, but we need to change it slightly. Either we clone it, or we allow overrides.
Similarly, suppose we have a fixed project file, but then we want to override that with something specific that's likely to mutate more often than our project -- for example a companywide configuration banning certain package versions that are known bad.
Then we need to allow our own settings to be overridden.
And as noted in a linked ticket, this holds not just for constraints, not just for flags, but also for e.g. index-state, or perhaps settings that should exist only in CI configurations but nowhere else, etc.
So making constraints and also all other settings overridable in a uniform way -- e.g. "last one wins" -- is a very straightforward approach to allowing all that.
Note that "pick some packages and solve the rest" is a form of override by the way, just a very specifically constrained and ad-hoc one.
from cabal.
Related Issues (20)
- Cabal-3.12.0.0 passes include dirs to GHC in a new order HOT 6
- build-tool-depends in Cabal regresses ghc ability to build from source distribution HOT 5
- Cabal external command requires typing Return to exit HOT 1
- Support monitoring directory recursive globs
- cabal init fails if git is not installed HOT 5
- Failure to find a program produces an incomprehensible error
- Encountered possible bug during building rpki-prover HOT 14
- Using Setup.hs build --with-ghc looses configure --ghc-option HOT 1
- Conditions don't work with flags HOT 2
- Are we validating `ghc-options` in `.cabal` files? HOT 4
- Do not pass environment variables to `happy`/`alex`, or at least allow a way to filter HOT 2
- Is the `CabalParsing` class necessary? HOT 2
- Changelog for Cabal 3.12 is missing mention of error codes
- Amend non-reinstallable packages list HOT 6
- "Use of GHC's environment variable GHC_PACKAGE_PATH is incompatible with Cabal" when running `Setup.hs test` should be a warning, not an error HOT 4
- Remember "Choose a language for" choice on `cabal init` HOT 4
- Favour non-preferred versions over deprecated versions
- [RFC] Revive cabal sandboxes (UX) HOT 2
- perf: verifyFetchedTarball called once for each package from a remote repository
- Come up with a way to build documentation for a package without rebuilding a lot HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cabal.