Ошибка стека Haskell в NixOS: в пакете ‹pkg name› отсутствуют файлы

Я пытаюсь собрать пакет, который, как я проверил, работает на дистрибутивах, отличных от NixOS. Вот ошибка:

$ stack --nix build
th-expand-syns-0.4.4.0: configure
th-expand-syns-0.4.4.0: build
bytes-0.15.3: configure
bytes-0.15.3: build                                 
th-lift-instances-0.1.11: configure                 
th-lift-instances-0.1.11: build                     
Progress 3/9                                        

--  While building custom Setup.hs for package bytes-0.15.3 using:
      /run/user/1000/stack22517/bytes-0.15.3/.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/setup/setup --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0 build --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
    Process exited with code: ExitFailure 1
    Logs have been written to: /home/george/godot-haskell/.stack-work/logs/bytes-0.15.3.log

    [1 of 2] Compiling Main             ( /run/user/1000/stack22517/bytes-0.15.3/Setup.lhs, /run/user/1000/stack22517/bytes-0.15.3/.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/setup/Main.o )
    [2 of 2] Compiling StackSetupShim   ( /home/george/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs, /run/user/1000/stack22517/bytes-0.15.3/.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/setup/StackSetupShim.o )
    Linking /run/user/1000/stack22517/bytes-0.15.3/.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/setup/setup ...
    Configuring bytes-0.15.3...
    Preprocessing library for bytes-0.15.3..
    Building library for bytes-0.15.3..
    [1 of 5] Compiling Data.Bytes.Get   ( src/Data/Bytes/Get.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Data/Bytes/Get.o )
    [2 of 5] Compiling Data.Bytes.Put   ( src/Data/Bytes/Put.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Data/Bytes/Put.o )
    [3 of 5] Compiling Data.Bytes.Signed ( src/Data/Bytes/Signed.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Data/Bytes/Signed.o )
    [4 of 5] Compiling Data.Bytes.VarInt ( src/Data/Bytes/VarInt.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Data/Bytes/VarInt.o )
    [5 of 5] Compiling Data.Bytes.Serial ( src/Data/Bytes/Serial.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Data/Bytes/Serial.o )
    Failed to load interface for ‘Control.Monad.Primitive’
    There are files missing in the ‘primitive-0.6.3.0’ package,
    try running 'ghc-pkg check'.
    Use -v to see a list of the files searched for.


--  While building custom Setup.hs for package th-lift-instances-0.1.11 using:
      /home/george/.stack/setup-exe-cache/x86_64-linux-nix/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0 build --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
    Process exited with code: ExitFailure 1
    Logs have been written to: /home/george/godot-haskell/.stack-work/logs/th-lift-instances-0.1.11.log

    Configuring th-lift-instances-0.1.11...
    Preprocessing library for th-lift-instances-0.1.11..
    Building library for th-lift-instances-0.1.11..
    [1 of 1] Compiling Instances.TH.Lift ( src/Instances/TH/Lift.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Instances/TH/Lift.o )
    Failed to load interface for ‘Control.Monad.Primitive’
    There are files missing in the ‘primitive-0.6.3.0’ package,
    try running 'ghc-pkg check'.
    Use -v to see a list of the files searched for.


--  While building custom Setup.hs for package th-expand-syns-0.4.4.0 using:
      /home/george/.stack/setup-exe-cache/x86_64-linux-nix/Cabal-simple_mPHDZzAJ_2.0.1.0_ghc-8.2.2 --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0 build --ghc-options " -ddump-hi -ddump-to-file -fdiagnostics-color=always"
    Process exited with code: ExitFailure 1
    Logs have been written to: /home/george/godot-haskell/.stack-work/logs/th-expand-syns-0.4.4.0.log

    Configuring th-expand-syns-0.4.4.0...
    Preprocessing library for th-expand-syns-0.4.4.0..
    Building library for th-expand-syns-0.4.4.0..
    [1 of 2] Compiling Language.Haskell.TH.ExpandSyns.SemigroupCompat ( Language/Haskell/TH/ExpandSyns/SemigroupCompat.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Language/Haskell/TH/ExpandSyns/SemigroupCompat.o )
    [2 of 2] Compiling Language.Haskell.TH.ExpandSyns ( Language/Haskell/TH/ExpandSyns.hs, .stack-work/dist/x86_64-linux-nix/Cabal-2.0.1.0/build/Language/Haskell/TH/ExpandSyns.o )

    /run/user/1000/stack22517/th-expand-syns-0.4.4.0/Language/Haskell/TH/ExpandSyns.hs:18:1: error:
        Could not find module ‘Data.Generics’
        There are files missing in the ‘syb-0.7’ package,
        try running 'ghc-pkg check'.
        Use -v to see a list of the files searched for.
       |
    18 | import Data.Generics
       | ^^^^^^^^^^^^^^^^^^^^

Запуск ghc-pkg check -v дает следующее:

$ ghc-pkg check -v
GHC package manager version 8.2.2
Timestamp 1970-01-01 00:00:01 UTC for /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/package.conf.d/package.cache
using cache: /nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/package.conf.d/package.cache
db stack: ["/home/george/.ghc/x86_64-linux-8.2.2/package.conf.d","/nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/package.conf.d"]
flag db stack: ["/home/george/.ghc/x86_64-linux-8.2.2/package.conf.d","/nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/package.conf.d"]

а также

$ ghc-pkg list
/nix/store/3v8p0pvcplr3bfvrnh4fyqrqk2ddyl6f-ghc-8.2.2/lib/ghc-8.2.2/package.conf.d
    Cabal-2.0.1.0
    array-0.5.2.0
    base-4.10.1.0
    binary-0.8.5.1
    bytestring-0.10.8.2
    containers-0.5.10.2
    deepseq-1.4.3.0
    directory-1.3.0.2
    filepath-1.4.1.2
    ghc-8.2.2
    ghc-boot-8.2.2
    ghc-boot-th-8.2.2
    ghc-compact-0.1.0.0
    ghc-prim-0.5.1.1
    ghci-8.2.2
    haskeline-0.7.4.0
    hoopl-3.10.2.2
    hpc-0.6.0.3
    integer-gmp-1.0.1.0
    pretty-1.1.3.3
    process-1.6.1.0
    rts-1.0
    template-haskell-2.12.0.0
    terminfo-0.4.1.0
    time-1.8.0.2
    transformers-0.5.2.0
    unix-2.7.2.2
    xhtml-3000.2.2

person George    schedule 06.07.2018    source источник
comment
Я использую только stackage2nix в NixOS, но это сообщение об ошибке немного похоже на поврежденную базу данных/хранилище пакетов --- насколько я понимаю, stack по-прежнему использует свое собственное в ~/.stack для зависимостей Haskell, даже когда включена интеграция с Nix. Можете ли вы попробовать удалить и восстановить ~/.stack и ./.stack-work? Если это не поможет, можете ли вы показать вывод тех же ghc-pkg команд, но запускаемых как stack exec -- ghc-pkg ...?   -  person Peter Amidon    schedule 07.07.2018
comment
@PeterAmidon: удаление ~/.stack и ./.stack-work и перекомпиляция исправили эту ошибку. Спасибо за вашу помощь.   -  person George    schedule 11.07.2018
comment
Отлично, я рад, что это было полезно. Я разместил репост фактического ответа ниже, так как он решил проблему!   -  person Peter Amidon    schedule 14.07.2018


Ответы (1)


Я думаю, что это проблема со стеком, а не с Nix. Хотя я не часто использую стек в Nix, похоже, что каталог ~/.stack (или, может быть, ./.stack-work?) поврежден, поскольку стек хранит там все свои зависимости от Haskell (независимо от Nix, даже в режиме --nix). Удаление этих каталогов и восстановление, вероятно, исправит любое повреждение, вызывающее эту проблему.

person Peter Amidon    schedule 14.07.2018