假设我有两个模块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'

即加载NecessaryModule2消除了NecessaryModule1中的所有功能。

那么这是否意味着我可以同时加载NecessaryModule1和NecessaryModule2的唯一方法是使用第三个文件(该文件同时导入NecessaryModule1和NecessaryModule2),然后加载该第三个文件? (例如,参见Haskell : loading ALL files in current directory path中的test.hs)谢谢。

-------------------------------------------------- -------------------------------------

[对怪兽的 react ]

嗨,如果我完成了:load NecessaryModule1,然后我想在MyMod.hs中加载模块:
--MyMod.hs
module MyMod where
import Data.List

f x = sort x

那我该怎么办呢? Riccardo在Haskell : unload module in WinGHCi中解释说:module假定模块已经加载。那么,这是否意味着实现加载多个自定义模块的唯一方法是通过对:load函数的一次调用来加载它们?谢谢。

最佳答案

好的,有两点要考虑:什么是“:module”知道要找到,以及在给定的提示下上下文中实际上是什么。

:module总是知道如何在已安装的软件包(未隐藏)中查找模块,默认情况下,这就是它可以访问的全部。但是您可以使用:load使它知道特定文件中的其他模块。每次调用:load都会重置其他模块集(和:reload保留相同的加载模块集,但会刷新其内容)。也:load使您进入指定的第一个模块的上下文。

换句话说,如果要进入同时导入两个模块的上下文,则需要执行以下操作:

> :load Module1 Module2
> :module Module1 Module2



换句话说:是的! (但这似乎不是问题,除了如果您仍想在新的上下文中使用它们,则需要重复以前加载的模块)

10-08 12:35