【发布时间】:2015-01-28 16:27:28
【问题描述】:
我目前正在 NixOS 上开发一个 Yesod Web 应用程序。我正在使用 default.nix 文件,如 O'Charles' blog post 中所述:
{ haskellPackages ? (import <nixpkgs> {}).haskellPackages }:
haskellPackages.cabal.mkDerivation (self: {
pname = "myblog";
version = "0.0.0";
src = ./.;
isLibrary = true;
isExecutable = true;
buildDepends = with haskellPackages; [
aeson bson conduit dataDefault fastLogger hjsmin
httpConduit monadControl monadLogger mongoDB persistent
#persistentMongoDB
persistentTemplate poolConduit shakespeare text
waiExtra waiLogger warp yaml yesod yesodAuth
yesodCore yesodDefault yesodForm yesodStatic
];
testDepends = with haskellPackages; [
hspec monadLogger persistent
#persistentMongoDB
resourcet transformers yesod yesodCore yesodTest
];
buildTools = with haskellPackages; [
cabalInstall ghcMod yesodBin
];
jailbreak = true;
})
这工作得很好。我可以像平常一样使用yesod 二进制和cabal。但是,我遇到了一个问题。运行cabal haddock 时,出现以下错误:
Running Haddock for mycoolblog-0.0.0...
Preprocessing library mycoolblog-0.0.0...
Warning: The documentation for the following packages are not installed. No
links will be generated to these packages: persistent-mongoDB-2.1.1
<command line>: cannot satisfy -package-id aeson-0.8.0.2-9e93bdd6f8e68379314dd5f31414f87f
(use -v for more information)
对此进行谷歌搜索会出现以下链接:github: cabal haddock 'cannot satisfy -package-id' #2468。好像是说应该使用 ghcWithPackages。
谷歌搜索 ghcWithPackages 会找到 O'Charles'(个人?)wiki on Nix。它有一个使用ghcWithPackages 开发已经在nixpkgs 中的包的示例,但是我无法让它与不在nixpkgs(我的cms/blog)中的包一起工作。
按照 O'Charles wiki 上的描述进行设置并运行 nix-shell -v,我收到以下错误:
evaluating file `/nix/store/an4sg7cxi1ii3vids8417kajl3ss13vd-nix-1.7/share/nix/corepkgs/derivation.nix'
error: cannot auto-call a function that has an argument without a default value (`cabal')
为什么会出现上述错误?如何为不在 nixpkgs 中的 Haskell 项目编写 default.nix 和 shell.nix?理想情况下,它会使用ghcWithPackages,以便cabal haddock 工作。
【问题讨论】:
标签: haskell yesod cabal-install nixos