【发布时间】:2017-04-16 12:57:26
【问题描述】:
我有一个名为prime-tools 的haskell 包。当我在包目录中使用stack ghci 时,我希望它会打开一个交互式ghci 并自动打开import prime-tools。相反,我发现它加载了 .cabal 文件中声明的所有模块。
例如,这是我的 .cabal 文件的摘录,显示了声明了哪些模块:
library
-- Modules exported by the library.
exposed-modules: PrimeTools.MathStuff, PrimeTools.Factors, PrimeTools.PQTrials, PrimeTools.Main, PrimeTools.Base, PrimeTools.Lucas
-- Modules included in this library but not exported.
other-modules: PrimeTools.Extras
这就是我在项目文件夹中运行stack ghci 后收到ghci> 提示时发生的情况:
Ok, modules loaded: PrimeTools.MathStuff, PrimeTools.Factors, PrimeTools.PQTrials, PrimeTools.Main, PrimeTools.Base, PrimeTools.Lucas, PrimeTools.Extras.
ghci>
加载模块而不是import prime-tools的问题是我现在可以使用所有模块中定义的所有函数无论它们是否被导出。
由这种区别引起的问题的一个示例:包prime-tools 中有两个模块,它们实现了一个名为pfactor 的函数。其中一个是导出的,旨在供软件包的最终用户使用,而另一个仅供内部使用,不导出。
在有人 cmets 之前,有充分的理由有两个实现 pfactor,但这与我的问题无关。
我的问题:如何使用stack 自动启动具有本地版本ghc 的ghci 环境并导入 我在其中运行命令的文件夹的包?
我想要的行为相当于运行以下命令序列:
stack ghci
ghci> :module -PrimeTools.MathStuff
ghci> :module -PrimeTools.Factors
ghci> :module -PrimeTools.PQTrials
ghci> :module -PrimeTools.Main
ghci> :module -PrimeTools.Base
ghci> :module -PrimeTools.Lucas
ghci> :module -PrimeTools.Extras
ghci> import PrimeTools.MathStuff
ghci> import PrimeTools.Factors
ghci> import PrimeTools.PQTrials
ghci> import PrimeTools.Main
ghci> import PrimeTools.Base
ghci> import PrimeTools.Lucas
这里的关键是我要导入在.cabal 文件中声明的exposed-modules,并且不要加载任何模块。不过,我不介意 other-modules 是否也被导入。有没有办法我可以使用stack 来做到这一点,而不必每次都运行这么长的命令序列?
【问题讨论】:
标签: haskell ghci haskell-stack