首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NixOS和ghc-mod -模块未找到

NixOS和ghc-mod -模块未找到
EN

Stack Overflow用户
提问于 2014-06-15 09:48:36
回答 1查看 2.3K关注 0票数 7

我正在试验emacs中的ghc插件与NixOS 14.04之间的交互问题。基本上,一旦通过nix-env -i安装了软件包,就可以从ghc和ghci中看到它们,这是haskell模式所认可的,但ghci却找不到。

为了避免信息重复,您可以在bug票证https://github.com/kazu-yamamoto/ghc-mod/issues/269中找到所有细节,以及VM中问题的准确复制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-15 10:46:39

为NixOS上的Haskell设置的当前默认包管理将适用于使用ghc或类似的包(ghc-modhint、插件、地狱、.)运行时资源。创建一个将它们很好地集成到其他环境中的Nix表达式需要做更多的工作。它被称为为包创建一个包装表达式,例如查看如何在NixOS上安装GHC操作。

这是合理的,因为您正在尝试创建一个原子化的安装过程,但它与数量未知的其他系统包与它们自己的原子安装和更新交互。这是可行的,但还有更快的工作要做。

看看这个在wiki的安装页上的示例。。不要试图创建一个原子化的ghc-mod包,而是将它焊接到ghc上,因此ghc+ghc是一个原子更新。

我安装了ghc+ghc,并将下面的安装脚本添加到我的~/.nixpkgs/nixpkgs.nix文件中。

代码语言:javascript
复制
hsEnv = haskellPackages.ghcWithPackages (self : [                            
  self.ghc                                                                   
  self.ghcMod                                                                
  # add more packages here                                                   
]);

安装包的方式如下:

代码语言:javascript
复制
nix-env -i hsEnv

或者更好的情况是:

代码语言:javascript
复制
nix-env -iA nixpkgs.haskellPackages.hsEnv

我有一个上面的别名,所以我不必每次都打印出来。它只是:

代码语言:javascript
复制
nixh hsEnv

此方法的另一面是,与nix-env -i[A]一起安装的其他Haskell包将无法与上述安装一起工作。如果我想让所有东西都与镜头包一起工作,那么我必须修改安装脚本,以包括lens,比如:

代码语言:javascript
复制
hsEnv = haskellPackages.ghcWithPackages (self : [                            
  self.ghc                                                                   
  self.ghcMod 
  self.lens                                                               
  # add more packages here                                                   
]);

重新安装。Nix似乎没有为lensghc-mod在hsEnv中使用不同的安装,也没有使用nix-env -i ghc中的ghc,所以很显然,在幕后只需要更多的安装就可以以上述方式组合现有的包。

ghc-mod在上面的脚本中安装得很好,但到目前为止,我还没有测试它与Emacs的集成。

添加到github线程的附加注释

DanielG:

我在使用这个环境时遇到了一些麻烦,我甚至无法让阴谋安装正常运行:/我只是遇到了很多错误,比如:

使用Nix和NixOS,您几乎从不使用Cabal在全局级别进行安装。

  • 如果要使用cabal-install,请确保使用沙箱。你可能不需要它,但它在那里,它能工作。
  • 当安装像ghc-modhint之类的软件包时使用ghc-mod,或者任何东西都需要对现有的软件包有很强的运行时意识(它们很难使原子化,ghcWithPackages对GHC来说也是如此)。
  • 如果您正在开发,请使用nix-env -i stdenv安装posix工具的标准套件。NixOS并不强迫您使用不一定需要的工具来培养命令行和路径。
  • 阴谋假定存在一些标准工具,如arpatch(我认为),如果内存服务正确的话,还有其他一些工具。

如果您在需要时使用标准安装方法和/或ghcWithPackages,那么NixOS将在包级别上减少(如果您绘制了一个依赖树,它们将指向/nix/store中的同一个包,nix-store --optimise总是可以在文件级别上对存储进行增强),许多包会自动地不像阴谋式凉鞋盒那样。

对评论的答复

代码语言:javascript
复制
[carlo@nixos:~]$ nix-env -iA nixos.pkgs.hsEnv

installing `haskell-env-ghc-7.6.3'
these derivations will be built:
  /nix/store/39dn9h2gnp1pyv2zwwcq3bvck2ydyg28-haskell-env-ghc-7.6.3.drv
building path(s) `/nix/store/minf4s4libap8i02yhci83b54fvi1l2r-haskell-env-ghc-7.6.3'
building /nix/store/minf4s4libap8i02yhci83b54fvi1l2r-haskell-env-ghc-7.6.3
collision between `/nix/store/1jp3vsjcl8ydiy92lzyjclwr943vh5lx-ghc-7.6.3/bin/haddock' and `/nix/store/2dfv2pd0i5kcbbc3hb0ywdbik925c8p9-haskell-haddock-ghc7.6.3-2.13.2/bin/haddock' at /nix/store/9z6d76pz8rr7gci2n3igh5dqi7ac5xqj-builder.pl line 72.
builder for `/nix/store/39dn9h2gnp1pyv2zwwcq3bvck2ydyg28-haskell-env-ghc-7.6.3.drv' failed with exit code 2
error: build of `/nix/store/39dn9h2gnp1pyv2zwwcq3bvck2ydyg28-haskell-env-ghc-7.6.3.drv' failed

从碰撞开始的线告诉你出了什么问题:

代码语言:javascript
复制
collision between `/nix/store/1jp3vsjcl8ydiy92lzyjclwr943vh5lx-ghc-7.6.3/bin/haddock' and `/nix/store/2dfv2pd0i5kcbbc3hb0ywdbik925c8p9-haskell-haddock-ghc7.6.3-2.13.2/bin/haddock' at /nix/store/9z6d76pz8rr7gci2n3igh5dqi7ac5xqj-builder.pl line 72.

这是两个不同的哈多克之间的冲突。切换到新配置文件,然后再试一次。由于这是一个焊接在一起的ghc+packages,它不应该安装在一个配置文件与其他Haskell软件包。这并不能阻止您同时从两个包中运行二进制文件和中断程序,它们只需要在它们自己的名称空间中运行,所以当您调用黑线鳕鱼、阴谋集团、ghc时,每个配置文件只有一个选择。

如果您还不熟悉配置文件,那么可以使用:

代码语言:javascript
复制
nix-env -S /nix/var/nix/profiles/per-user/<user>/<New profile name>

默认配置文件要么是default,要么是channels,而不是为您设置的配置文件。但是请检查一下,这样你就可以稍后切换到它了。这里有一些技巧,这样您就不必使用/nix/var/nix/profiles/目录来存储您的概要文件,以减少键入时的数量,但这是默认位置。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24228402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档