首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nix & Haskell -使用来自cabal2nix的cabal2nix和通用shell.nix

Nix & Haskell -使用来自cabal2nix的cabal2nix和通用shell.nix
EN

Stack Overflow用户
提问于 2015-01-28 21:06:35
回答 1查看 1.5K关注 0票数 4

从一个非常基本的阴谋集团文件

代码语言:javascript
复制
cabal2nix ./. > default.nix 

然后是一个shell.nix

代码语言:javascript
复制
let
  pkgs = import <nixpkgs> {};
  haskellPackages = pkgs.haskellPackages_ghc784.override {
    extension = self: super: {
      thispackage = self.callPackage ./default.nix {};
    };
  };
in pkgs.myEnvFun {
     name = haskellPackages.thispackage.name;
     buildInputs = [
       (haskellPackages.ghcWithPackages (hs: ([
         hs.cabalInstall
       ] ++ hs.thispackage.propagatedNativeBuildInputs)))
     ];
   }

在nix-shell中,当运行阴谋配置时,它会抱怨缺少包,比如文本。

如果我将文本包显式地放入shell.nix中,如

代码语言:javascript
复制
let
  pkgs = import <nixpkgs> {};
  haskellPackages = pkgs.haskellPackages_ghc784.override {
    extension = self: super: {
      thispackage = self.callPackage ./default.nix {};
    };
  };
in pkgs.myEnvFun {
     name = haskellPackages.thispackage.name;
     buildInputs = [
       (haskellPackages.ghcWithPackages (hs: ([
         hs.cabalInstall
         hs.text
       ] ++ hs.thispackage.propagatedNativeBuildInputs)))
     ];
   } 

阴谋配置很好,但我希望hs.thispackage.propagatedNativeBuildInputs提供这些包。

非常基本的haskell项目可以在

https://github.com/fatlazycat/haskell-nix-helloworld

假设你可以这样工作,我错了吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 15:16:54

Haskell库使用propagatedNativeBuildInputs属性将它们的构建输入传播到依赖它们的其他构建。但是,您的包不是一个库--它是一个可执行文件--所以不需要传播构建输入,因此propagatedNativeBuildInputs是空的。相反,您将在hs.thispackage.extraBuildInputs中找到所需的信息。

一般来说,这类nix-shell环境的定义在发布版15.09分支(或nixos-不稳定)中变得容易得多。只需运行cabal2nix --shell . >shell.nix,就可以得到一个shell.nix文件,您可以使用该文件构建nix-build shell.nix,也可以使用nix-shell进入交互式开发环境。

http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure有更多关于这个主题的信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28202394

复制
相关文章

相似问题

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