nixで破損したHaskellパッケージを上書きする方法は?

nixで破損したHaskellパッケージを上書きする方法は?

私はNixOSを使用しており、HaskellプロジェクトにNix Haskell環境を設定しようとしています。私は持っていますHaskellパッケージNixで書いて作業しようとしていますが、nix-shellHaskellパッケージClayに依存しています。開いたばかりのバグレポートに記載されているようにビルドされません。。このHaskellパッケージを別のバージョン(以前のバージョンでも新しいバージョンでも構いません)にどのようにオーバーライドできますか?

答え1

まったく関係はありませんが、ビルドされていない既存のパッケージを変更する必要があります。私は最終的に:

nixpkgs.config.packageOverrides = pkgs: {
    haskellPackages = pkgs.haskellPackages.override {
      overrides = hsSelf: hsSuper: {
        greenclip  = pkgs.haskell.lib.overrideCabal hsSuper.greenclip  (oa: {
          version = "3.1.1";
          sha256 = "1axh1q7kcvcnhn4rl704i4gcix5yn5v0sb3bdgjk4vgkd7fv8chw";
          executablePkgconfigDepends = oa.executablePkgconfigDepends ++ [pkgs.xorg.libXdmcp];
        });

        wordexp  = pkgs.haskell.lib.overrideCabal hsSuper.wordexp  (oa: {
          version = "0.2.2";
          sha256 = "1mbcrq89jz0dcibw66w0jdy4f4bfpx4zwjfs98rm3jjgdikwdzb4";
        });
      };
    };
  };

上記は私の設定にあります。

答え2

他のすべての人にとって、プロパティで上書きを使用してoverride提供できます。これにより、オーバーライドパッケージを含むパッケージセットの独自のバージョンが作成されます。haskellPackagesoverrides

たとえば、beam-coreパッケージからバージョン制限を削除し、パッケージテストを無効にしますbeam-postgres

myHaskellPackages = nixpkgs.haskellPackages.override {
    overrides = hself: hsuper: {
      # Can add/override packages here
      beam-core = nixpkgs.haskell.lib.doJailbreak hsuper.beam-core;
      beam-postgres = nixpkgs.haskell.lib.dontCheck hsuper.beam-postgres;
    };
  };

次に、変更されたパッケージセットを使用してプロジェクトをビルドします。

myHaskellPackages.callCabal2nix "my-project" ./. { }

nixpkgs.haskellPackages.callHackageHackageに存在する限り、特定のバージョンのパッケージのフォークを構築したり、変更されたcallCabal2nixローカルリポジトリで使用したり、fetchFromGitHub同様にリモートリポジトリを参照したりできます。

破損したHaskellパッケージを修正する方法の詳細については、以下を参照してください。こことHaskellの開発にNixを使用する一般的なヒントここで依存関係の依存関係をオーバーライドする方法の例を見つけることができます。

関連情報