tl;dr; To answer your questions: the contents of my ghc installed ghc
wrapper is listed below, and no, your installed packages should not show up
in the same nix-store location as your ghc (unless you use shell
environments like in my previous mail).

So, I guess it comes down to which method you use to deploy ghc and haskell
packages on your machine. It sunds to me like your process is something
along the lines of:

$ nix-env -i cabal-install
$ cabal install hdevtools ...

I think I tried something like that in the beginning, but switched to using
per-project environments due to both the poor integration with ad-hoc cabal
installs and of course the benefits of isolated dependency tracking (though
arguably that could be achieved using cabal-dev or cabal sandbox).

When using a dedicated project shell environment, ghc is wrapped
differently:

% which ghc
/nix/store/lvb..nz-haskell-env-ghc-7.6.3/bin/ghc

% cat $(which ghc)
#! /nix/store/fp...v9sq-bash-4.2-p45/bin/bash -e
export NIX_GHC=/nix/store/lvb..nz-haskell-env-ghc-7.6.3/bin/ghc
export NIX_GHCPKG=/nix/store/lvb..nz-haskell-env-ghc-7.6.3/bin/ghc-pkg
export
NIX_GHC_DOCDIR=/nix/store/lvb..nz-haskell-env-ghc-7.6.3/share/doc/ghc/html
export NIX_GHC_LIBDIR=/nix/store/lvb..nz-haskell-env-ghc-7.6.3/lib/ghc-7.6.3
exec /nix/store/b9....sgl-ghc-7.6.3/bin/ghc "-B$NIX_GHC_LIBDIR"
"${extraFlagsArray[@]}" "$@"

When thinking about it, it might just be enough to just

export NIX_GHC_LIBDIR=~/.ghc-7.6.3/packages.conf.d
(or whatever now the correct path to the cabal user (or sandbox) package
database is..)


Now, if you've used nix-env to install your haskell dependencies and tools
you might not be as lucky as in the first case, as the package database
resides in ~/.nix-profile/ and is spread over multiple files (one per cabal
package) due to the read-only nature of the nix-store, and the GHC api used
to list the available packages (as it appears to hdevtools) needs to be
specifically instructed to consider each of these files (this may be what
the ghc-get-packages.sh script in your ghc wrapper actually does, but that
may just be speculation on my part)

I hope I've given you some leads to proceed :-)


2014-06-19 12:26 GMT+02:00 Thomas Strobel <ts...@cam.ac.uk>:

>  Hi,
>
> thanks for your help, Thomas and Philip, but I would have two further
> questions.
>
> - What should be exported in /nix/store/<current-ghc-hash>/bin/ghc ? My
> ghc wrapper only looks like:
> '''
> #! /nix/store/...--bash-4.2-p45/bin/bash -e
> exec /nix/store/...-ghc-7.6.3/bin/ghc $(/nix/store/...-ghc-get-packages.sh
> 7.6.3 "$(dirname $0)") "${extraFlagsArray[@]}"
> "$@"
> '''
>
> - '/nix/store/...ghc-<version>-wrapper/lib/ghc-<version>/package.conf.d'
> seems to contain only configurations for a few standard modules. Should all
> packages which are installed on my system show up in there?
>
>
> Again, many thanks!
> Thomas
>
>
>
> On 06/18/2014 02:45 PM, Philip Carlsen wrote:
>
>    IIRC, issuing:
>
> $(grep export /nix/store/<your-current-ghc-hash>/bin/ghc)
>
>  (or maybe ~/.nix-profile/bin/ghc will work as well if you have your
> haskell tools in your home profile)
>
> in your working shell sets NIX-specific environment variables that the ghc
> api uses to locate the package database by sourcing the wrapper code around
> ghc. Actually, hdevtools should probably just be wrapped similarly itself,
> though I think there might be some problems with that (not that I remember
> right now).
>
>  I'm using hdevtools myself, and if this is insufficient to get it working
> I might be forgetting some part of my setup.
>
>  Now, for haskell development in general I can recommend making shell
> environments per haskell project you develop using the myEnvFun (see
> https://nixos.org/wiki/Howto_develop_software_on_nixos)
>  I have a file with something along the lines of:
>
> A general dev-env.nix:
> -----------------
>
> # This nix environment contains all the tools used in the process of
> developing
> # Because each package has its own dependencies, this file provides a
> function
> # for creating environments, rather than a concrete environment.
> # envName :: String -- The suffix of the name of the resulting environment.
> # hsEnvDeps :: HsPkgs -> [CabalNix] -- the dependencies of the package
> being
> #   developed in this environment.
> { envName, hsEnvDeps } :
> let
>   pkgs = import <nixpkgs> {};
>   hsEnv = pkgs.haskellPackages.ghcWithPackagesOld (hsPkgs : ([
>     hsPkgs.hlint
>     hsPkgs.hdevtools
>     hsPkgs.hasktags
>     ] ++ (hsEnvDeps hsPkgs)));
> in
>   pkgs.myEnvFun {
>     name = envName;
>     buildInputs = with pkgs; [
>       binutils
>       coreutils
>       ctags
>       vimHugeX
>       zsh
>       hsEnv
>       ];
>     shell = "${pkgs.zsh.outPath}/bin/zsh";
>     extraCmds = ''
>       $(grep export ${hsEnv.outPath}/bin/ghc)
>     '';
>     }
>
>  ...And a project-env.nix file for each project:
>  -----------------------------------------------------------
> let
>   envFun        = import ./dev-env.nix;
>   projectCabal = import ./cabal.nix;
> in
>   envFun {
>     envName   = "myproject";
>     hsEnvDeps = hsPkgs :
>      (let
>        deriv = hsPkgs.callPackage projectCabal (rec {
>           # satisfy dependencies not in hsPkgs by adding them here.
>          });
>      in deriv.nativeBuildInputs ++ deriv.propagatedNativeBuildInputs);
>     }
>
>  And 'cabal.nix' being the file output by the cabal2nix tool applied to
> your cabal file.
>
>  Then just issuing
>
> $ nix-build project-env.nix
>  $ ./result/bin/load-env-myproject
>
>  gives you a completely selfcontained, replicatable development
> environment where everything is wired to the same package database. (Except
> for the vim plugins for hdevtools, syntastic etc, which I have yet to
> figure out how to include in my nix expression. So for the time being these
> should be installed separately in ~/.vim)
>
>
> 2014-06-18 11:11 GMT+02:00 Thomas Strobel <ts...@cam.ac.uk>:
>
>> Hi!
>>
>> I've got a question for those using Haskell under NixOS. I'm trying to
>> use hdevtools to check my Haskell source file, but hdevtools does not
>> find any modules. ghc-pkg does, as does ghc-mod. From what I have read
>> it might be necessary to set some environment variables.
>> Can someone maybe give me an example of how to use hdevtools under NixOS?
>>
>> Many thanks in advance,
>> Thomas
>> _______________________________________________
>> nix-dev mailing list
>> nix-dev@lists.science.uu.nl
>> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>>
>
>
>
> _______________________________________________
> nix-dev mailing list
> nix-dev@lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev
>
>
_______________________________________________
nix-dev mailing list
nix-dev@lists.science.uu.nl
http://lists.science.uu.nl/mailman/listinfo/nix-dev

Reply via email to