如何在haskell中安装和导入库?

jer*_*uyi 5 haskell

在官方教程Haskell in 5 steps中,有一个导入库的示例:

\n\n
import Control.Parallel\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我使用 ghc 进行编译:

\n\n
ghc parallel.hs -o parallel -O2 --make -threaded -rtsopts\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
parallel.hs:1:1: error:\nCould not find module \xe2\x80\x98Control.Parallel\xe2\x80\x99\nUse -v to see a list of the files searched for.\n  |\n1 | import Control.Parallel\n  | ^^^^^^^^^^^^^^^^^^^^^^^\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我 stackoverflowed 并找到了这个问题。所以我:

\n\n
cabal new-install parallel --lib\n
Run Code Online (Sandbox Code Playgroud)\n\n

并得到:

\n\n
Resolving dependencies...\nUp to date \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n\n

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

\n\n

我将参考 cabal 的文档了解install和之间的区别new-install

\n

Tho*_*son 3

正如@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
Run Code Online (Sandbox Code Playgroud)

产量:

% 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
Run Code Online (Sandbox Code Playgroud)