如何在nix中从haskell包(使用stack/cabal)构建可执行文件



我正在寻找类似的东西:

shell.nix

{ pkgs ? import <nixpkgs> {} }:
let
threadscope = ...
speedscope = ...
in
stdenv.mkDerivation {
name = "haskell-env";
nativeBuildInputs = [
# Haskell tools
ghcid ghc
# Profiling tools
threadscope
speedscope
];
}

然后我可以使用nix-shell:

% nix-shell
...
nix-shell % threadscope <some-commands>
nix-shell % speedscope <some-commands>

你通常只是从github/hackage/stackage的源代码构建还是使用pkgs.haskellPackages.<my-package>

我通常从haskellPackages中获取工具。

如果你只想要一个带有工具的shell,你可以使用这样的表达式。

{ pkgs ? import <nixpkgs> {} }:
let
# Select a package set. haskellPackages is recommended, but
# if you need a different ghc, use pkgs.haskell.packages.ghc8102 for example
haskellPackages = pkgs.haskellPackages;
in
pkgs.mkShell {
nativeBuildInputs = [
# Haskell tools
haskellPackages.ghc
haskellPackages.ghcid
# Profiling tools
haskellPackages.threadscope
# pkgs.speedscope (not packaged yet)
];
}

如果您想要一个具有特定预编译库的shell,可以使用ghcWithPackages函数而不是ghc。如果您想要本地Haskell包的预编译依赖项,可以用haskellPackages.shellFor函数替换pkgs.mkShell

如果你想打包speedscope,Nixpkgs手册记录了节点包的打包过程

相关内容

  • 没有找到相关文章

最新更新