Haskell Stack package installation error

2019-06-05 00:27发布

user$: stack install dictionaries

Error: While constructing the build plan, the following exceptions were encountered:

In the dependencies for dictionaries-0.1.0.0:
    binary-0.8.3.0 must match >=0.7.5 && <0.8 (latest applicable is 0.7.6.1)
    time-1.6.0.1 must match >=1.5.0 && <1.6 (latest applicable is 1.5.0.1)

With the above command, I want to install the dictionaries package globally.

What are my options here? I plan to stack unpack dictionaries, and then modify the versions. But then how to install the modified 'local' package globally?

What's the best practices here?

Thanks

2条回答
够拽才男人
2楼-- · 2019-06-05 00:54

With the above command, I want to install the dictionaries package globally.

(Preliminary note: by "globally", I will assume you mean globally for your user, as opposed to a system-wide installation.)

dictionaries is not in any Stackage snapshot. As far as I'm aware of, that means you cannot install it globally, as for libraries that is only an option if the package is in a snapshot. Cf. Stack issue #2656 -- while the planned feature described there sounds like what you are trying to do, there is a caveat:

Should also warn when it isn't used with --copy-bins, and if there are targets that don't have executables, as these both indicate a misunderstanding about how it works.

That being so, my suggestion is to install the package per-project, using the packages field with an extra-dep key -- that is, the "most general" solution in jeiea's answer.

查看更多
Evening l夕情丶
3楼-- · 2019-06-05 01:00

Easiest one: Add allow-newer: true to stack.yaml

It would to be the solution in this case. It solves the upper version limitation problem like yours. But of course there is possibility of build failure.

Maybe possible one: Change resolver to latest nightly

That failure occurs sometimes on nightly snapshot. And usually repaired soon by library update and new nightly snapshot. If you are using old snapshot, change it to latest. Or waiting may be one of solution.

Most general one: Make dependency to modified local package

You can do it by adding the package path to stack.yaml packages:. Then stack will use it instead of snapshot one.

The way you want is probably not a good idea. Even if that's possible, how are you going to handle with the many version of snapshot case? Local dependencies should be specified to each package.

查看更多
登录 后发表回答