How to set up the Haskell library for access through GHCi using Nixos?

I managed to install ghc with nix-env -i ghc .

Now I want to install the Haskell library, how to do this? For example, turtle library ( https://hackage.haskell.org/package/turtle ).

I ran nix-env -f "<nixpkgs>" -iA haskellPackages.turtle , however ghci and import Turtle are ghci :

 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. 

The output of 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 
+7
source share
2 answers

This works differently on NixOS due to cleanliness. NixOS 'GHC will only look at its own immutable installation directory and packages that were installed by the user using cabal install .

What you can do is install a GHC wrapper in your user profile that delivers a good set of packages when ghci starts ghci .

Create the my-ghc.nix :

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

Delete the previous attempt to avoid name conflicts:

 nix-env -e ghc turtle 

Install wrapped GHC:

 nix-env -if my-ghc.nix 

You can edit the file in the future and re-run this command.

When I work on a project, I prefer to use cabal2nix and nix-shell . (For an introduction, see Oliver Charles's blog post )

+4
source

As an alternative answer to Robert, you can use the nix-shell environment by creating a shell.nix file with the contents:

 { pkgs ? import <nixpkgs> {} }: let myGhc = pkgs.haskellPackages.ghcWithPackages (hpkgs: with hpkgs; [ turtle ]); in pkgs.mkShell { buildInputs = [ myGhc ]; } 

And enter this environment with nix-shell .

0
source

Source: https://habr.com/ru/post/1273509/


All Articles