要在ghci中进行脚本编写和播放,我想从软件包Data.Matrix
中导入matrix
。
基础已经包含Data.Matrix
,但来自另一个软件包:matrices
。
我已经可以通过PackageImports成功解决此问题: 对于ghci,我这样做:
$ stack exec --resolver lts-12.5 --package "matrix" -- ghci
Prelude> :set -XPackageImports
Prelude> import "matrix" Data.Matrix
和脚本:
#!/usr/bin/env stack
-- stack --package matrix
{-# LANGUAGE PackageImports #-}
import "matrix" Data.Matrix
main = putStrLn $ Data.Matrix.prettyMatrix
$ Data.Matrix.fromList 1 1 [1]
由stack ghc script.hs; ./script.hs
但是documentation说:“您可能不需要使用此方法。另请参见“精简和重命名模块”……”
There,建议使用例如-package "base (Data.Bool as Bool)"
,因此我想尝试一下,并根据自己的情况想像是
-package "base (Data.Matrix as Mx)"
重命名我要忽略的现有名称,或者
-package "matrix (Data.Matrix as Mx)"
为我想要的模块添加自定义名称。
但是我什至无法使示例工作:
stack exec -package "base (Data.Bool as Bool)" -- ghci
Invalid option `-package'
Did you mean this?
--package
...
stack exec --package "base (Data.Bool as Bool)" -- ghci
The following errors occurred while parsing the build targets:
- Directory not found: (Data.Bool
- Directory not found: Bool)
stack exec -package base (Data.Bool as Bool) -- ghci
bash: syntax error near unexpected token `('
用于脚本编写
#!/usr/bin/env stack
(I've tried each of those separately)
-- stack -package "base (Data.Bool as Bool)"
-- stack -package base (Data.Bool as Bool)
-- stack --package "base (Data.Bool as Bool)"
-- stack --package base (Data.Bool as Bool)
import Bool
main = putStrLn $ show True
不编译(stack ghc script2.hs
)
[1 of 1] Compiling Main ( script2.hs, script2.o )
script2.hs:4:1: error:
Could not find module ‘Bool’
Use -v to see a list of the files searched for.
|
4 | import Bool
| ^^^^^^^^^^^
答案 0 :(得分:2)
在the GHC manual中找到的所有内容都直接涉及到 GHC编译器的选项,或者涉及Haskell代码本身。但是您正在使用Stack进行软件包管理,这是完全不同的野兽。 (当然,它调用了 GHC,但它的作用远不止于此。)
使用Stack时,没有理由涉足PackageImports(除非您真的需要从不同的软件包中将两个相同名称的模块一起导入!)。默认情况下,Stack会隐藏每个未明确依赖的包,因此无需重命名任何内容。只需使用正常的Stack选项来指定软件包,并在实际的Haskell中简单导入即可:
#!/usr/bin/env stack
-- stack --resolver lts-12.5 runghc --package matrix
import Data.Matrix as M
main = putStrLn . prettyMatrix
$ M.fromList 1 1 [1]
确保stack
实际上使用了解析器行,即任一行
$ chmod +x matrixtest.hs
$ ./matrixtest
或
$ stack matrixtest.hs
但不是stack ghc matrixtest.hs
或类似的东西。