0

我正在寻找类似的东西:

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>

4

1 回答 1

4

我通常从haskellPackages.

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

{ 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.mkShellfunction替换haskellPackages.shellFor

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

于 2020-12-09T11:16:48.377 回答