【问题标题】:How to install and import a library in haskell?如何在haskell中安装和导入库?
【发布时间】:2019-07-11 10:36:39
【问题描述】:

官方教程Haskell in 5 steps中,导入库的例子:

import Control.Parallel

然后我用ghc编译:

ghc parallel.hs -o parallel -O2 --make -threaded -rtsopts

就像教程告诉我的那样。 (我的文件名是parallel.hs)但是我得到了:

parallel.hs:1:1: error:
Could not find module ‘Control.Parallel’
Use -v to see a list of the files searched for.
  |
1 | import Control.Parallel
  | ^^^^^^^^^^^^^^^^^^^^^^^

然后我stackoverflow找到了this question。所以我:

cabal new-install parallel --lib

得到:

Resolving dependencies...
Up to date 

然后我再次编译它,但得到了同样的错误。 如何解决这个问题?我错过了任何命令行参数吗?


嗯,cabal install parallel之后,库导入,程序编译成功,按预期运行。

installnew-install 之间的区别我会参考 cabal 的文档

【问题讨论】:

  • 如果你在详细模式下运行它会怎样?所以-v?然后它应该显示它搜索过的包列表。
  • 不确定有什么区别,但我通常运行cabal install 而不使用new-。刚刚试了,效果很好?
  • 如果你现在学习和使用stack,你可以为自己避免一些未来的伤害。
  • 目前的现状有点奇怪。我们现在可以使用cabal installcabal new-installstack install 安装东西。然后,我们可能会在系统范围内、用户本地或一些更本地的沙箱中安装一个包。它很容易变得混乱。我现在倾向于使用stack 来做所有事情,因为社区似乎正在慢慢朝着这个方向发展。不过,它可能更简单。
  • @chi 计划实际上只有两个选项:cabal new-install(然后将其简称为cabal install)和stack install。没有沙盒或任何东西。

标签: haskell


【解决方案1】:

正如@Lorenzo 所说,cabal install 工作正常。使用cabal new-install,您应该看到一个警告,指出您忘记了--lib,因为parallel 不包含可执行文件,并且库必须通过--lib 显式安装。完整的功能命令集是:

cd $(mktemp -d)
cabal update && cabal new-install --lib parallel
cat <<EOF > parallel.hs
module P where
import Control.Parallel
EOF
ghc -c parallel.hs
ls parallel.o parallel.hi

产量:

% cd $(mktemp -d)
% cabal update && cabal new-install --lib parallel
... snipped output ...
% cat <<EOF > parallel.hs
module P where
import Control.Parallel
EOF
% ghc -c parallel.hs
Loaded package environment from /home/tommd/.ghc/x86_64-linux-8.6.4/environments/default
% ls parallel.o parallel.hi
parallel.hi  parallel.o

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 2020-04-14
    相关资源
    最近更新 更多