首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用分叉Haskell包覆盖nixpkgs

用分叉Haskell包覆盖nixpkgs
EN

Stack Overflow用户
提问于 2018-04-15 05:58:07
回答 1查看 519关注 0票数 2

我试图用自己的叉子覆盖nixpkgs中的Haskell包。我所拥有的代码似乎起作用了;我可以看到新的分叉结构。然而,当我打开一个nix-shell时,我没有正确的包版本。

这是我的shell.nix文件。

代码语言:javascript
复制
{
  nixpkgs ? import <nixpkgs> {
    config = {
      packageOverrides = super: let self = super.pkgs; in {
        haskellPackages = super.haskellPackages.override {
          overrides = self: super: {
            persistent = self.callPackage ../persistent/persistent/persistent.nix {};
          };
        };
      };
    };
  }
  , compiler ? "ghc822"
  , doBenchmark ? false
  , withHoogle ? true
}:

let

  inherit (nixpkgs) pkgs;

  f = { mkDerivation, aeson, base, base16-bytestring
      , base64-bytestring, blaze-html, bytestring, case-insensitive
      , classy-prelude, classy-prelude-conduit, classy-prelude-yesod
      , clientsession, conduit, containers, cryptohash, curl
      , data-default, directory, email-validate, errors, fast-logger
      , file-embed, foreign-store, hjsmin, hspec, http-client
      , http-client-tls, http-conduit, lens, mime-mail, mime-mail-ses
      , monad-control, monad-logger, persistent, persistent-postgresql
      , persistent-template, pwstore-fast, random, rollbar, safe
      , shakespeare, stdenv, template-haskell, text, time
      , unordered-containers, utf8-string, uuid, vector, wai, wai-extra
      , wai-logger, warp, yaml, yesod, yesod-auth, yesod-core, yesod-form
      , yesod-static, yesod-test
      }:
      mkDerivation {
        pname = "app";
        version = "0.0.0";
        src = ./.;
        isLibrary = true;
        isExecutable = true;
        enableSeparateDataOutput = true;
        buildDepends = [ pkgs.postgresql ];
        libraryHaskellDepends = [
          aeson base base16-bytestring base64-bytestring blaze-html
          bytestring case-insensitive classy-prelude classy-prelude-conduit
          classy-prelude-yesod clientsession conduit containers cryptohash
          curl data-default directory email-validate errors fast-logger
          file-embed foreign-store hjsmin http-client http-client-tls
          http-conduit lens mime-mail mime-mail-ses monad-control
          monad-logger persistent persistent-postgresql persistent-template
          pwstore-fast random rollbar safe shakespeare template-haskell text
          time unordered-containers utf8-string uuid vector wai wai-extra
          wai-logger warp yaml yesod yesod-auth yesod-core yesod-form
          yesod-static
        ];
        executableHaskellDepends = [
          aeson base bytestring case-insensitive classy-prelude
          classy-prelude-conduit classy-prelude-yesod conduit containers
          data-default directory fast-logger file-embed foreign-store hjsmin
          http-conduit monad-control monad-logger persistent
          persistent-postgresql persistent-template safe shakespeare
          template-haskell text time unordered-containers vector wai
          wai-extra wai-logger warp yaml yesod yesod-auth yesod-core
          yesod-form yesod-static
        ];
        testHaskellDepends = [
          aeson base bytestring case-insensitive classy-prelude
          classy-prelude-conduit classy-prelude-yesod conduit containers
          data-default directory fast-logger file-embed foreign-store hjsmin
          hspec http-conduit monad-control monad-logger persistent
          persistent-postgresql persistent-template safe shakespeare
          template-haskell text time unordered-containers uuid vector wai
          wai-extra wai-logger warp yaml yesod yesod-auth yesod-core
          yesod-form yesod-static yesod-test
        ];
        license = stdenv.lib.licenses.gpl3;
      };

  haskellPackages = if compiler == "default"
                       then pkgs.haskellPackages
                       else pkgs.haskell.packages.${compiler};

  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;

  drv = variant (haskellPackages.callPackage f {});

in

  if pkgs.lib.inNixShell then drv.env else drv

持久化叉中的版本号是2.8.2,但是当我在nix-shell中运行ghc-pkg list时,我会看到persistent-2.7.1。为什么会这样呢?

我的叉中的nix表达式如下所示:

代码语言:javascript
复制
{ mkDerivation, aeson, attoparsec, base, base64-bytestring
, blaze-html, blaze-markup, bytestring, conduit, containers
, fast-logger, haskell-src-meta, hspec, http-api-data
, monad-control, monad-logger, mtl, old-locale, path-pieces
, resource-pool, resourcet, scientific, silently, stdenv, tagged
, template-haskell, text, time, transformers, unliftio-core
, unordered-containers, vector, void
}:
mkDerivation {
  pname = "persistent";
  version = "2.8.2";
  src = ./.;
  libraryHaskellDepends = [
    aeson attoparsec base base64-bytestring blaze-html blaze-markup
    bytestring conduit containers fast-logger haskell-src-meta
    http-api-data monad-logger mtl old-locale path-pieces resource-pool
    resourcet scientific silently tagged template-haskell text time
    transformers unliftio-core unordered-containers vector void
  ];
  testHaskellDepends = [
    aeson attoparsec base base64-bytestring blaze-html bytestring
    conduit containers fast-logger hspec http-api-data monad-control
    monad-logger mtl old-locale path-pieces resource-pool resourcet
    scientific tagged template-haskell text time transformers
    unordered-containers vector
  ];
  homepage = "http://www.yesodweb.com/book/persistent";
  description = "Type-safe, multi-backend data serialization";
  license = stdenv.lib.licenses.mit;
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-15 06:42:54

我在IRC上回答了这个问题。

我正在重写haskellPackages,但是因为我将编译器设置为ghc822,所以实际上不使用重写的包,因为这是有条件的:

代码语言:javascript
复制
haskellPackages = if compiler == "default"
                       then pkgs.haskellPackages
                       else pkgs.haskell.packages.${compiler};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49838941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档