GHCi中的模块加载选项

hdg*_*ood 15 haskell ghci

为什么GHCi有很多不同的命令用于将模块加载到会话中?

以下是我所知道的,以及他们:help在ghci中相当混乱的解释:

  • add [*]<mod> - 将模块添加到当前目标集
  • :module [+/-] [*]<mod> - 设置表达式评估的上下文
  • :load [*]<mod> - 加载模块及其家属
  • :reload <mod> - 重新加载当前模块集.(注意::help并不是说这可以采用模块参数,但似乎可以.)
  • import Mod

他们各自做什么?星号如何改变它?为什么这么多?:(

GS *_*ica 12

这里有两个不同的概念:目标集评估上下文.

你与设定的目标工作:add,:load而且:reload,你用的评价环境中工作:moduleimport.

目标集是ghci正在读取和编译的本地可用模块的列表.通常,您可以使用它来指定您正在处理的源.ghci将加载和编译这些模块及其所需的任何依赖项.

您可以使用:load将目标集重置为给定的模块集,并将:add给定模块添加到现有目标集.

如果你在目标集中指定模块,*那么它们将始终是"字节码解释" - 这意味着它们加载速度快但运行速度不如编译代码 - 否则ghci将使用编译的目标文件(如果可用)和字节码解释不.

:reload自己重新加载整个目标集和依赖项.我不太确定究竟做了什么:reload <mod>,但我认为它会重新加载<mod>和依赖,而其他部分则不受影响.

评估上下文控制提示符下的名称范围,并在此处完整记录.用于添加到评估上下文的模块可以是目标集合中的本地模块+依赖项,也可以是先前使用该ghc-pkg工具向ghc注册的"包"模块(或cabal最终调用的模块).import Foo只是另一种写作方式:module +Foo.

注意:这个答案混合了我对使用ghci的经验的直观理解,只是阅读文档并尝试将两者整合在我的脑海中.所以我可能没有100%准确!