我正在使用ghc-8.10.2。当我将一个源文件(其中包含许多顶层绑定和一个主函数,没有module
声明)编译成可执行文件时,然后键入ghci
以使用ghc的解释器,使用:load filename
命令加载源文件。我发现在ghci环境中只有main
顶级绑定是可见的,其他顶级绑定可以被引用,除非我对源文件进行了一些无意义的修改,然后重新加载它。我尝试重新加载源文件而不对其进行更改,甚至使用:reload
命令,但它不起作用,因此我想问是否有一个命令可以随时强制重新加载模块。
最多到Haskell报告
允许使用仅包含模块主体的缩写形式。如果使用了这种形式,则假定头部为“module Main(main)where”。
这意味着,如果您不使用module
声明,默认情况下只从中导出main
函数。这就是为什么您只能加载这样的函数。如果要避免这种情况,请从以下内容开始您的文件:
module Main where
...
:r
应该就可以了,而不是其他人似乎使用的 :reload
。
:set -fno-object-code
然后执行:reload
命令?如果不行,也许可以通过一些技巧来让它在错误的位置查找目标代码。 - Daniel Wagner:m *Main
(或者文件名中模块的名称)。关键点在于*
。 - Daniel Wagner:set -fno-object-code
会输出信息 一些标志没有被识别:-fno-object-code,而我之前尝试过:set -fbyte-code
,虽然能够被识别但是无效。 - 叶芝秋:add *Main
,但它告诉我<no location info>: error: module ��main:Main�� is defined in multiple files: parser.hs parser.hs Failed, one module loaded.
- 叶芝秋:!touch
命令创建文件并使用:reload
命令重新加载它。 - luqui