Verwenden Sie cabal2nix, um eine lokale Nix-Umgebung für Pakete zu erstellen, die nicht in nixpkgs @ enthalten sin
Ich habe derzeit eine Yesod-Webanwendung, die ich auf NixOS entwickle. Ich benutze eindefault.nix
Datei wie in O'Charles '@ beschriebBlogeintra:
{ 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;
})
Das funktioniert sehr gut. Ich kann das @ benutzyesod
binary undcabal
wie gewöhnlich. Ich habe jedoch ein Problem. Beim Laufencabal haddock
, Ich erhalte den folgenden Fehler:
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)
enn Sie darüber googeln, wird der folgende Link angezeigt:github: cabal haddock 'kann -package-id nicht erfüllen' # 2468. Es scheint, als würde gesagt, dass ghcWithPackages verwendet werden sollte.
Googeln überghcWithPackages
bringt O'Charles '(persönliche?)wiki auf Nix. Es hat ein Beispiel für die Verwendung vonghcWithPackages
, um ein Paket zu entwickeln, das bereits in nixpkgs enthalten ist, aber ich kann es nicht für ein Paket verwenden, das noch nicht in nixpkgs enthalten ist (mein cms / blog).
Einstellen wie in O'Charles 'Wiki beschrieben und ausführennix-shell -v
, Ich erhalte den folgenden Fehler:
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')
Warum erhalte ich den obigen Fehler? Wie kann ich ein @ schreibdefault.nix
undshell.nix
für ein Haskell-Projekt, das noch nicht in nixpkgs enthalten ist? Im Idealfall würde es @ verwendghcWithPackages
damitcabal haddock
funktioniert.