在GHCI中,您可以使用:add module
从当前项目添加模块,也可以使用:module + module
将模块添加到当前范围。使用:add
时加载的模块将在您使用:reload
命令时自动重新加载,但必须是源模块,并且不能来自外部程序包。
如果您不小心使用:add
而不是:module +
来尝试加载模块,则将来的重新加载始终会失败,并显示模块是包模块而不是源模块的错误消息。如何删除模块以便可以再次成功使用重新加载,而无需通过:load
重置整个源模块列表?
答案 0 :(得分:2)
不幸的是,:load
(或:cd
)是摆脱目标列表的唯一方法。更改目标列表的唯一其他功能是:add
,如您所知,只会添加其他目标。
然而,judging by the source,修复不应该那么难。如果您愿意重新编译GHC,那么这样的事情应该有效:
ghciCommands :: [Command]
ghciCommands = map mkCmd [
...
("rem", keepGoingPaths removeModule, completeFilename),
...
-- | @:rem@ command
removeModule :: [FilePath] -> InputT GHCi ()
removeModule files = do
lift revertCAFs
files' <- mapM expandPath files
targets <- mapM (\m -> GHC.guessTarget m Nothing) files'
mapM_ GHC.removeTarget targets
_ <- doLoadAndCollectInfo False LoadAllTargets
return ()
话虽如此,我还没有尝试过。此外,这可能值ticket on the official tracker。