2015-05-01 111 views
1

我的Haskell的安装无法找到操作系统GHC找不到安装的模块

$ ghci 
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help 
Loading package ghc-prim ... linking ... done. 
Loading package integer-gmp ... linking ... done. 
Loading package base ... linking ... done. 
Prelude> :m +Data.ByteString.Lazy 

<no location info>: 
Could not find module `Data.ByteString.Lazy' 
It is not a module in the current program, or in any known package. 

但我已经安装了用yum这个模块安装字节字符串模块:

$ rpm -ql ghc-bytestring 
/usr/lib64/ghc-7.6.3/bytestring-0.10.0.2 
/usr/lib64/ghc-7.6.3/bytestring-0.10.0.2/libHSbytestring-0.10.0.2-ghc7.6.3.so 
/usr/share/doc/ghc-bytestring 
/usr/share/doc/ghc-bytestring/LICENSE 

有什么不对?

回答

1

这里的情况与您在动态链接阶段和用于编译的标头期间使用的C++类似。在像ghc-bytestring这样的Fedora软件包中,只有没有标题的库。要安装头文件,我必须安装ghc-bytestring-devel软件包。

一个例子在Fedora 24:

server.hs:7:8: 
    Could not find module ‘Data.Text’ 
    Perhaps you meant Data.Set (from containers-0.5.5.1) 
    Locations searched: 
     Data/Text.hs 
     Data/Text.lhs 

所以改变用户root,则:

是什么包呢?

# dnf search ghc|grep text 

ghc-text.x86_64 : An efficient packed Unicode text type 
ghc-boxes.x86_64 : 2D text pretty-printing library 
ghc-pango.x86_64 : Binding to the Pango text rendering engine 
ghc-css-text.x86_64 : CSS parser and renderer 
ghc-hgettext.x86_64 : Haskell binding to libintl 
ghc-attoparsec.x86_64 : Fast combinator parsing for bytestrings and text 
ghc-text-devel.x86_64 : Haskell text library development files 
ghc-blaze-textual.x86_64 : Fast rendering of common datatypes 
ghc-css-text-devel.x86_64 : Haskell css-text library development files 
ghc-hgettext-devel.x86_64 : Haskell hgettext library development files 
ghc-blaze-textual-devel.x86_64 : Haskell blaze-textual library development files 

那么安装了什么?

# rpm --query ghc-text 
ghc-text-1.1.1.3-3.fc24.x86_64 

# rpm --query ghc-text-devel 
package ghc-text-devel is not installed 

因此,让我们安装devel软件包。

# dnf install ghc-text-devel 
Installed: 
    ghc-text-devel.x86_64 1.1.1.3-3.fc24 

...之后编译成功。

+0

不错,就是这样。我不会发现,因为“devel”我为“Data.Text”添加了一个示例。这有点令人惊讶,因为我认为Haskell更像Java,当你编写新代码时,它很少需要'devel'包,而不是C++。 –

0

如果发生这种情况,您应该可以通过ghc-pkg list了解更多信息。例如,如果软件存储库提供的二进制包已损坏,则可能发生这种情况; ghc-pkg list会报告。一般来说,GHC不会在/usr/lib64/ghc-7.6.3/中寻找软件包,否则该目录中的package.cache未更新以反映新软件包。

一两件事,可能会导致GHC在错误的地方看的是有没有在机器上的多个GHCs:例如,如果which ghc揭示/usr/local/bin/ghc那么你可能在某个时候编译GHC从源代码和它的包占用一些/usr/local/lib/ghc-7.6.3/package.conf.d/文件夹,而您的存储库安装了/usr/bin/ghc,它正在您想要的文件夹中查找。

无论如何,修复:如果package.cache文件存在并且具有该文件的有效条目,那么您可以运行ghc -package-conf /path/to/package.cache ...将这些软件包添加到您的可执行文件中。如果你还有其他问题,ghc -v ...是一个很好的调试资源,用于“在这里使用哪个版本的软件包?”问题类型。

如果package.cache文件不存在,那么您遇到了更大的问题,并且可能最简单的方法是前往/home下的目录ghc-pkg list。将所需的软件包安装到该目录,即使它不理解这些更大的上下文,GHC也应该选择它。您也可以开始使用本地软件包的沙箱cabal到您的项目。

相关问题