你如何在 nix 中从 haskell 包(使用堆栈/cabal)构建可执行文件?
How do you build an executable from haskell packages (which use stack / cabal) in nix?
我正在寻找与此类似的内容:
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 包的预编译依赖项,您可以将 pkgs.mkShell
替换为 the haskellPackages.shellFor
function。
如果您想打包 speedscope,Nixpkgs 手册文档 the packaging process for node packages
我正在寻找与此类似的内容:
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 包的预编译依赖项,您可以将 pkgs.mkShell
替换为 the haskellPackages.shellFor
function。
如果您想打包 speedscope,Nixpkgs 手册文档 the packaging process for node packages