2016-11-29 5 views
3

К сожалению, установка Haskell пакета «Euterpea» терпит неудачу на NixOS:Установка Haskell пакет Euterpea терпит неудачу на NixOs

The Nixpkgs manual заявляет, что все пакеты Haskell, зарегистрированные на hackage (что пакет Euterpea является), включенными в менеджер Никс пакет и должны быть установлены так:

nix-env -f "<nixpkgs>" -iA haskellPackages.Euterpea 

После некоторой загрузки и компиляции, происходит следующее сообщение об ошибке, и процесс прерывается:

[ 7 of 46] Compiling Euterpea.IO.MIDI.MidiIO (Euterpea/IO/MIDI/MidiIO.lhs, dist/build/Euterpea/IO/MIDI/MidiIO.o) 

Euterpea/IO/MIDI/MidiIO.lhs:153:25: 
    Not in scope: ‘Heap.extractHead’ 

Euterpea/IO/MIDI/MidiIO.lhs:160:34: Not in scope: ‘Heap.head’ 
builder for ‘/nix/store/wc8d02s0kin4l0siwixlylssizfsrzgx-Euterpea-1.1.1.drv’ failed with exit code 1 
error: build of ‘/nix/store/wc8d02s0kin4l0siwixlylssizfsrzgx-Euterpea-1.1.1.drv’ failed 

У кого-нибудь есть идея, как это исправить?

+0

Euterpea-1.1.1 Похоже, что ваш 'nixpkgs' устарел, но, скорее всего, это не имеет отношения к проблеме. У меня возникла ошибка конфигурации при выполнении вашей команды (с Euterpea 2.0.2) – danbst

ответ

1

Проблема заключается в том, что Euterpea не скомпилирован с более поздними версиями его зависимостей, доступными в nixpkgs. Вот это выражение, которое может succcessfully построить Euterpea (проверено на текущем nixpkgs нестабильного):

написать следующее Никс выражения в файл с именем euterpea.nix:

# let's get nixpkgs into scope 
with (import <nixpkgs> {}); 

let 
    lib = haskell.lib; 

    # build a "package set" (collection of packages) that has the correct versions of the dependencies 
    # needed by Euterpea 
    customHaskellPackages = haskellPackages.override (old: { 
    overrides = self: super: { 
     heap = self.callHackage "heap" "0.6.0" {}; 
     PortMidi = self.callHackage "PortMidi" "0.1.5.2" {}; 
     stm = self.callHackage "stm" "2.4.2" {}; 
    }; 
    }); 
in { 
    # this is a ghc wrapper that has only Euterpea as its visible packages 
    ghc = customHaskellPackages.ghcWithPackages (pkgs: [ pkgs.Euterpea ]); 

    # this is just the output of the build for Euterpea 
    pkg = customHackagePackages.Euterpea; 

    # for convenience, also expose the package set that we build against 
    pkgset = customHaskellPackages; 
} 

Затем вы можете выполнить следующие команды:

$ nix-build euterpea.nix -A ghC# build a GHC with the Euterpea package included 
/nix/store/mjlp6rxcsiv5w8ay1qp0lrj8m40r3cyl-ghc-8.0.1-with-packages 
$ result/bin/ghci # result contains a GHC installation that has Euterpea, so we can run GHCI from it 
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help 
Loaded GHCi configuration from /home/.ghci 
λ: import Euterpea 
λ: 
Leaving GHCi. 
$ nix-env --install --file euterpea.nix -A ghC# we can also install this ghc into our user environment 
installing ‘ghc-8.0.1-with-packages’ 
building path(s) ‘/nix/store/7jwrwxaxyig6hf747rsan5514gw7qi51-user-environment’ 
created 5840 symlinks in user environment 
$