在 NixOS 中,如何从命令行 运行 一个 Haskell 可执行文件?

In NixOS, how to run a Haskell executable from the command line?

我正在尝试从命令行 运行 Haskell 可执行文件,以 this blog 为例。我的机器 运行s NixOS。

该博客是关于将 markdown 识字 haskell 编译成 html 以用于发布博文。该过程中的一个步骤是 运行 .lhs 文件上的 haskell 程序 hscolour 以创建一个 .mkd 文件,其代码语法通过 html 和 css.

cat blah.lhs | hscolour -lit -css > blah.mkd

然而,当我尝试 运行 此命令时,出现以下 command not found 错误。

$ cat blah.lhs | hscolour -lit -css > blah.mkd                                                            
hscolour: command not found

我不确定我遇到的这个问题是特定于 NixOS,还是让 haskell 可执行文件更广泛地用于命令行。 如何使 haskell 可执行文件(例如 hscolour 从命令行可用?


我已经在构建了 hscolournix-shell 中尝试了 运行ning 这个命令。 hscolour 命令仍未找到。

$ nix-shell -p "haskellPackages.ghcWithPackages (pkgs: with pkgs; [hscolour])"
$ cat functor-proofs.lhs | hscolour -li
hscolour: command not found

需要知道的两件事:

  1. 你不需要 GHC,你只需要来自 hscolour 的可执行文件,你可以通过 haskell.lib.justStaticExecutables haskellPackages.hscolour.

  2. 获得它
  3. hscolour 的二进制文件称为 HsColour,而不是 hscolour

演示:

$ nix-shell -p 'haskell.lib.justStaticExecutables haskellPackages.hscolour' --run 'HsColour --version'
HsColour 1.24

我将通过寻找 .

来分享我很快发现的另一种方法
$ `nix-build --no-out-link "<nixpkgs>"   -A haskellPackages.hscolour`/bin/HsColour --version                         
HsColour 1.24