问题描述
我是Haskell的新手,正在使用GHCi编辑和运行Haskell文件。由于某些原因,我无法编辑文件的源代码。我得到的行为非常奇怪。
下面是正在发生的事情的屏幕截图。我正在加载文件lec3.hs,并尝试编辑该文件以添加以下功能:myfun = \w -> not w
。由于某些原因,当我在myfun False
之后立即 调用该函数时,该函数成功运行。我不需要重新加载文件。
很明显,该功能未添加到源代码中。重新加载文件时,我收到一条错误消息,指出myfun
不存在。
有人可以帮助我了解GHCi为什么采用这种方式,以及如何解决这种行为吗?我已经花了一个小时试图解决这个问题。衷心感谢您的帮助。
解决方法
回答
是否可以从GHCi编辑.hs文件?
从技术上讲,这是可能的,因为Haskell与其他任何语言文件IO操作一样。具体来说,appendFile
允许您向文件添加内容。
<NavLink
to={item.route}
activeClassName={classes.activeItem}
onClick={e => handleItemClick(e,key)}
isActive={(match,location) => {
// remove last part of path ( admin/customer/list becomes admin/customer for example )
const pathWithoutLastPart = location.pathname.slice(0,location.pathname.lastIndexOf("/"));
// if current parent is matched and doesn't contain childs activate it
if (item.items.length === 0 && match) {
return true;
}
// if sliced path matches parent path
in case of customer item it becomes true ( admin/customer === admin/customer )
else if (pathWithoutLastPart === item.route) {
return true;
}
// else inactive item
else {
return false;
}
}}
>
...
</NavLink>
但这实际上不是编辑文件的好方法。打开两个窗口,一个带有文本编辑器,另一个带有REPL,即GHCi,更有意义。它可以是两个完全独立的OS窗口,也可以是您的IDE的两个子窗口,或者其他任何一种,但是在任何一种情况下,GHCi仅用于评估和单行原型制作,而不用于实际添加/编辑代码。 (如果有帮助,可以将单行原型复制并粘贴到编辑器中。)
,在GHCi中输入内容不应将其添加到源代码中。但是,如果您已将文件加载到GHCi中,则可以使用:e
命令对其进行编辑,然后在关闭编辑器时将自动重新加载它。
如果要处理多个文件且需要指定,则可以使用:e filename.hs
。
通常,在单独的编辑器中工作更容易,只需使用:r
重新加载到GHCi中即可,但是:e
有时会有用。