Как установить библиотеку Haskell для доступа через GHCi с помощью Nixos?

мне удалось установить ghc с nix-env -i ghc.

Я хотел бы установить библиотеку Haskell сейчас, как это должно быть сделано? Например,turtle (https://hackage.haskell.org/package/turtle Библиотека).

Я nix-env -f "<nixpkgs>" -iA haskellPackages.turtle, однако работает ghci и import Turtle не удается:

Prelude> import Turtle

<no location info>: error:
    Could not find module ‘Turtle’
    It is not a module in the current program, or in any known package.

выход ghc-pkg list:

/nix/store/fvf278s3lqsjv488ahhdi8jx6i0qzsr9-ghc-8.0.2/lib/ghc-8.0.2/package.conf.d      
Cabal-1.24.2.0                          
array-0.5.1.1                           
base-4.9.1.0                            
binary-0.8.3.0                          
bytestring-0.10.8.1                     
containers-0.5.7.1                      
deepseq-1.4.2.0                         
directory-1.3.0.0                       
filepath-1.4.1.1                        
ghc-8.0.2                               
ghc-boot-8.0.2                          
ghc-boot-th-8.0.2                       
ghc-prim-0.5.0.0                        
ghci-8.0.2                              
haskeline-0.7.3.0                       
hoopl-3.10.2.1                          
hpc-0.6.0.3                             
integer-gmp-1.0.0.1                     
pretty-1.1.3.3                          
process-1.4.3.0                         
rts-1.0                                 
template-haskell-2.11.1.0               
terminfo-0.4.0.2                        
time-1.6.0.1                            
transformers-0.5.2.0                    
unix-2.7.2.1                            
xhtml-3000.2.1

1 ответов


это работает по-разному на NixOS из-за чистоты. GHC NixOS будет смотреть только на свой собственный неизменяемый каталог установки и пакеты, которые были установлены пользователем с cabal install.

что вы можете сделать, это установить в свой профиль пользователя обертку GHC, которая предоставляет хороший набор пакетов при запуске ghci.

создайте файл my-ghc.nix:

(import <nixpkgs> {}).haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [
    lens
    aeson
    turtle
])

удалите предыдущую попытку, чтобы избежать имени столкновения:

nix-env -e ghc turtle

установите обернутый GHC:

nix-env -if my-ghc.nix

вы можете отредактировать файл в будущем и повторно запустить эту команду.

когда я работаю над проектом, я предпочитаю использовать cabal2nix и nix-shell. (Для введения см. сообщение в блоге Оливера Чарльза)