想象一下,我在GHCi中加载一个文件(不是模块),就像这样
:l file.hs
并且文件内部有两个函数f
和g
,f
有一些错误(例如,错误的结果)和g
调用{{ 1}}。
如何在GHCi REPL中使用正确的版本重新定义f
,并使f
调用新版本而无需更改或重新加载文件?
由于
答案 0 :(得分:2)
你不能。
在repl中加载文件时,好像定义位于单独的模块中,因此g
将不会查找您在repl中定义的f
,即使来自您的观点是您的定义隐藏了原始的f
函数。
Haskell使用词法范围,而您建议的是动态范围功能。见lexical scoping vs dynamic scoping。 修改repl以使用词法作用域编译代码然后允许人们使用动态作用域修改它是完全不切实际的。因此,它没有完成,你问的是不可能的。