我按照reflex-platfrom project development上的说明,尝试将servant-reflex作为一个子模块进行测试。
My project来了。
在我的backend.cabal中,我有一个内置的依赖项:snap >= 1.1.1.0 && < 1.2
当I nix-shell -A shells.ghc --run "cabal new-build all"时,它尝试安装heist-1.0.1.0和snap-1.0.0.2,然后失败
Configuring heist-1.0.1.0...
Setup: Encountered missing dependencies:
aeson >=0.6 && <1.2要查看我的nixos-unstable中的内容,我:
`nix-channel --list`
nixos https://nixos.org/channels/nixos-unstable
`nix-env -f "<nixpkgs>" -qaP -A haskellPackages.aeson`
warning: Nix search path entry '/home/demo/.nix-defexpr/channels' does not exist, ignoring
haskellPackages.aeson aeson-1.2.4.0
`nix-env -f "<nixpkgs>" -qaP -A haskellPackages.snap`
warning: Nix search path entry '/home/demo/.nix-defexpr/channels' does not exist, ignoring
haskellPackages.snap snap-1.1.0.0
`nix-env -f "<nixpkgs>" -qaP -A haskellPackages.heist`
warning: Nix search path entry '/home/demo/.nix-defexpr/channels' does not exist, ignoring
haskellPackages.heist heist-1.0.1.2问:为什么nix-shell安装heist-1.0.1.0和snap-1.0.0.2,而不是heist-1.0.1.2和snap-1.1.0.0,这样就可以依赖于aeson-1.2.4.0?
发布于 2018-07-28 12:57:38
在IRC #nixos上得到了elvishjerricco的回答。
To
doJailbreakheist,则可以对project使用overrides参数
haskell只用于声明您想要转换为packages包的目录;它将为您运行cabal2nix。overrides用于对haskell包集进行派生更改。
default.nix
(import ./reflex-platform {}).project ({ pkgs, ... }: {
overrides = self: super: {
heist = pkgs.haskell.lib.doJailbreak super.heist;
map-syntax = pkgs.haskell.lib.doJailbreak super.map-syntax;
};
packages = {
common = ./common;
backend = ./backend;
frontend = ./frontend;
google-maps-reflex = ./google-maps-reflex;
};
shells = {
ghc = ["common" "backend" "frontend" "heist"]; # "backend" "frontend"];
ghcjs = ["common" "frontend"];
};
})https://stackoverflow.com/questions/51558875
复制相似问题