【问题标题】:How can I build a haskell dependency from a GitHub source .nix file, using nix?如何使用 nix 从 GitHub 源 .nix 文件构建 haskell 依赖项?
【发布时间】:2019-02-21 15:38:14
【问题描述】:

好的,所以我的项目有一个 .nix 文件,如下所示:

{ mkDerivation, base, blaze-html, clay, hakyll, hspec, stdenv }:
mkDerivation {
  pname = "open-editions";
  version = "0.1.0.0";
  src = ./.;
  isLibrary = false;
  isExecutable = true;
  executableHaskellDepends = [ base blaze-html clay hakyll ];
  testHaskellDepends = [ hspec ];
  license = "unknown";
  hydraPlatforms = stdenv.lib.platforms.none;
}

(这只是一个使用 hakyll 的 Web 项目。)问题是,clay 在 nixpkgs 中被破坏了。但我假设 clay 在 GitHub 上的主分支上工作。那么如何用下载和调用 GitHub 包的东西替换这个 haskell 依赖项clay 呢? GitHub 包里有一堆 .nix 文件,所以我猜它会相对简单,但我真的不知道从哪里开始。

【问题讨论】:

    标签: haskell nix


    【解决方案1】:

    您可以扩展您的 haskell 包集,类似于 this example

    clay 的 nix 文件可以使用 cabal2nix 创建

    cabal2nix git://github.com/sebastiaanvisser/clay.git > clay.nix
    

    假设您的 .nix 文件名为 open-editions.nix,您的 default.nix 可能看起来有点像:

    let
      pkgs = import <nixpkgs> {}; # or similar, I like to pin it with niv
    
      hs = pkgs.haskellPackages.extend(self: super: { # (1) extend the package set
        open-editions = self.callPackage ./open-editions.nix {};
        clay = self.callPackage ./clay.nix {}; # (2) update clay
      });
    in {
      inherit (hs) open-editions; # (3) make nix-build pick up my-project;
    }
    

    【讨论】:

    • 我无法让它发挥作用。我得到Setup: Encountered missing dependencies: hspec &gt;=2.2.0 &amp;&amp; &lt;2.6, hspec-discover &gt;=2.2.0 &amp;&amp; &lt;2.6
    • 有时版本限制过于严格,或者您可能需要覆盖多个包。在这种情况下,您也可以选择忽略测试。一些包在最近的包集上更容易获得。参见haskell.lib,尤其是doJailbreakdontCheck
    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2017-03-24
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多