6

你如何在记事本++上编译和运行 Haskell 我安装了插件 NppExec 然后按F6 我将 Haskell 文件保存到C:\Users\Sam\Desktop\haskell files\new 3.hs

因此,在按F6后的命令中,我尝试输入一些不同的内容:

C:\Users\Sam\Desktop\haskell files\new 3.hs`
ghc.exe new 3.hs
haskell new

但我得到了这些回应:

C:\Users\Sam\Desktop\haskell files\new 3.hs
CreateProcess() failed with error code 2:
The system cannot find the file specified.

ghc.exe new 3.hs
Process started >>>
target `new' is not a module name or a source file
<<< Process finished.

haskell new 3
CreateProcess() failed with error code 2:
The system cannot find the file specified.

================ READY ================

在记事本++上的haskell文件中编译和执行的正确方法是什么?

4

2 回答 2

12

您需要将 NppExec 设置为在当前目录中工作,因此在 Plugins、NppExec 中,勾选Follow $(CURRENT_DIRECTORY)

ghc new3.hs按 F6 时使用该命令(文件名中没有空格)。

关注当前目录

于 2013-01-19T19:01:28.190 回答
0

如果您将 Haskell 与堆栈一起使用,我发现了一种使用 NppExec 快速运行事物的好方法。这是一个比看起来更简单的过程,一旦你这样做了,你就可以开始了:

假设您在名为的文件中有这样的文件yourFileName.hs

main :: IO ()
main = putStrLn "Hello world!"
  1. 按 F6 开始 NppExec。(见下文注 1。)

  2. 将以下内容粘贴到窗口中。

cd "$(FULL_CURRENT_PATH)"
stack ghci
// This is a comment you can delete. Note 2 below.

(见下文注 3。)

  1. 按下 OK 按钮后,Notepad++ 控制台将运行 Haskell 解释器。

  2. 现在,再次按 F6。将弹出一个警告菜单。

  3. 在菜单中输入::cmd return $ unlines [":l yourFileName", ":main"]然后按 ENTER。该文件将执行。按 F6+ENTER 将再次加载并运行该文件。下次打开 Notepad++ 时,它仍然存在。每当您想使用新文件时,您yourFileName当然必须进行更改。

    说明::cmd return " . . . "允许您将一个字符串作为多个 ghci 命令执行,以 . 分隔\nunlines获取一个字符串列表并将它们与\n. 如果您不了解$,您将很快了解它,因为它是基本 Haskell 的一部分。

    如果您的文件中没有 main 函数,请改用:cmd return $ unlines [":l yourFileName"].


注 1:为方便起见,我使用 将Settings > ShortCutMapper > Plugin CommandsExecute 从 F6 更改为 F1。

注意 2:如果你以这种方式运行多种语言(比如 Lisp?),那么你可以// This is a comment...用 just 替换该行,// :cmd return $ unlines [":l yourFileName", ":main"]以便以后切换回 Haskell 时使用。

注意 3:不是粘贴cd "$(FULL_CURRENT_PATH)" stack ghci到 NppExec 窗口,一个更简单的方法是粘贴stack runghc "$(FULL_CURRENT_PATH)",不需要做任何其他事情。但是我发现在这种情况下,控制台需要更长的时间来加载和运行文件,所以上面的方法就是我使用的方法。

于 2018-05-20T06:46:14.940 回答