假设我有两个模块NecessaryModule1& NecessaryModule2(如帖子Haskell : loading ALL files in current directory path中所述。然后我在WinGHCi和GHCi中注意到,如果我这样做:
> :load NecessaryModule1
[1 of 1] Compiling NecessaryModule1 ( NecessaryModule1.hs, interpreted )
Ok, modules loaded: NecessaryModule1.
> addNumber1 2 3
5
> :load NecessaryModule2
[1 of 1] Compiling NecessaryModule2 ( NecessaryModule2.hs, interpreted )
Ok, modules loaded: NecessaryModule2.
> addNumber1 2 3
<interactive>:1:1: Not in scope: `addNumber1'
即。 loading NecessaryModule2消除了NecessaryModule1的所有功能。
这是否意味着我可以同时加载NecessaryModule1&amp; amp; NecessaryModule2是使用第三个文件(导入NecessaryModule1和NecessaryModule2)然后加载第三个文件? (例如,参见Haskell : loading ALL files in current directory path中的test.hs)谢谢。
[对geekosaur的反应]
嗨,如果我已完成:load NecessaryModule1
,然后我想在MyMod.hs中加载模块:
--MyMod.hs
module MyMod where
import Data.List
f x = sort x
那我该怎么做?在Haskell : unload module in WinGHCi中,Riccardo解释说:module
假设模块已经加载。这是否意味着实现加载多个自定义模块的唯一方法是通过:load
函数的单次调用来加载它们?感谢。
答案 0 :(得分:15)
:load
加载主程序模块。 :module
可用于加载其他模块:
> :load BaseModule -- this is the one that contains 'main'
> :module +AddedModule -- this is an additional library module
您还可以使用:module
卸载这些附加模块:
> :module -AddedModule -- after this @AddedModule@ will no longer be loaded
如果您没有带main
的模块,则可能需要使用:module +
来加载所有库模块。
答案 1 :(得分:14)
好的,有两件事需要考虑:“模块”知道找到什么,以及在给定提示下实际上是什么。
:模块总是知道如何在已安装的软件包中找到模块(未隐藏),默认情况下,它只能访问所有模块。但您可以使用:load来使其了解特定文件中的某些其他模块。每次调用:加载重置附加模块的集合(和:重新加载保持相同的加载模块集但刷新其内容)。另外:load将您置于您指定的第一个模块的上下文中。
换句话说,如果您想进入导入两个模块的上下文,您需要执行以下操作:
> :load Module1 Module2
> :module Module1 Module2
这是否意味着实现加载多个自定义模块的唯一方法是通过单次调用:load函数加载它们?
换句话说:是的! (但这似乎不是问题,除非您需要重复过去加载的模块,如果您仍想在新的上下文中使用它们)