私は現在、NixOS で開発している Yesod Web アプリケーションを持っています。default.nix
O'Charles のブログ投稿で説明されているようなファイルを使用しています。
{ 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
通常どおりです。しかし、私は1つの問題に直面しています。を実行する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 meet -package-id' #2468。ghcWithPackages を使うべきだと言っているようです。
グーグルで検索すると、NixghcWithPackages
の O'Charles' (個人的な?) wiki が表示されます。既に nixpkgs にあるパッケージを開発するために使用する例がありghcWithPackages
ますが、まだ nixpkgs にないパッケージ (私の cms/ブログ) で動作させることはできません。
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
andを書くにはどうすればよいですか? shell.nix
理想的には、それが機能するように使用ghcWithPackages
されcabal haddock
ます。