在官方教程Haskell in 5 steps中,有一个导入库的示例:
\n\nimport Control.Parallel\nRun Code Online (Sandbox Code Playgroud)\n\n然后我使用 ghc 进行编译:
\n\nghc parallel.hs -o parallel -O2 --make -threaded -rtsopts\nRun Code Online (Sandbox Code Playgroud)\n\n正如教程告诉我的那样。(我的文件名是parallel.hs)但是我得到:
\n\nparallel.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 | ^^^^^^^^^^^^^^^^^^^^^^^\nRun Code Online (Sandbox Code Playgroud)\n\n然后我 stackoverflowed 并找到了这个问题。所以我:
\n\ncabal new-install parallel --lib\nRun Code Online (Sandbox Code Playgroud)\n\n并得到:
\n\nResolving dependencies...\nUp to date \nRun Code Online (Sandbox Code Playgroud)\n\n然后我再次编译,但得到了同样的错误。\n如何解决这个问题?我错过了任何命令行参数吗?
\n\n好了cabal install parallel,库导入之后,程序编译成功,并按预期运行。
我将参考 cabal 的文档了解install和之间的区别new-install
正如@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)