Nix & Haskell - использование default.nix из cabal2nix и общего shell.nix

Из довольно простого файла Кабала

cabal2nix ./. > default.nix 

а затем shell.nix из

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 и запущена команда cabal configure, она жалуется на отсутствие пакетов, таких как текст.

Если я помещу текстовый пакет явно в shell.nix, например

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)))
     ];
   } 

Конфигурация cabal прекрасна, но я ожидаю, что hs.thispackage.propagatedNativeBuildInputs будет поставлять эти пакеты.

Самый простой проект haskell можно увидеть на

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

Я ошибаюсь, полагая, что вы можете работать таким образом?

Спасибо


person GIB    schedule 28.01.2015    source источник


Ответы (1)


Атрибут propagatedNativeBuildInputs используется библиотеками Haskell для распространения своих входных данных сборки на другие сборки, которые от них зависят. Однако ваш пакет не является библиотекой - это исполняемый файл - поэтому нет необходимости распространять входные данные сборки, и поэтому propagatedNativeBuildInputs пуст. Вместо этого вы найдете нужную информацию в hs.thispackage.extraBuildInputs.

Вообще говоря, определение таких nix-shell сред стало намного проще в ветке release-15.09 (или nixos-unstable). Просто запустите cabal2nix --shell . >shell.nix, и вы получите shell.nix файл, который можно использовать для сборки с nix-build shell.nix, а также для входа в интерактивную среду разработки с nix-shell.

http://nixos.org/nixpkgs/manual/#users-guide-to-the-haskell-infrastructure содержит гораздо больше информации по этому вопросу.

person Peter Simons    schedule 19.11.2015