如果我有一个文件,hello.hs:
main = putStrLn "Hello, World!"
我可以使用 haste 命令将其编译为 hello.js:
hastec hello.hs
如何在 nodejs 下运行结果 hello.js 文件?
默认情况下,Hastemain
设置为在浏览器onload
事件触发时执行。这显然对 Node 来说毫无意义,因此--onexec
在编译程序时需要将标志传递给 Haste:
$ hastec --onexec hello.hs
Haste 使用 Node 以这种方式运行它的测试套件。但是请注意,除了写入标准输出(如putStrLn
)之外,Haste 不会将系统操作(文件 IO 等)映射到节点等效项。如果你正在编写一个需要与操作系统交互的应用程序,你最好使用 vanilla GHC。
更新: 谢谢,很好的回答。回顾一下,如果你想在 node 下编译和运行 hello.hs,这两行将是:
hastec --onexec hello.hs
node hello.js
haste 不知道节点,所以 .js 文件中的生产不导出任何东西。
您需要以某种方式扩充 .js 文件以导出所需的功能,即您需要导出 hasteMain() 函数。
您可以尝试使用 --with-js 命令行选项来 hastec
或者您可以简单地将以下行附加到 hello.js 文件的末尾:
module.exports = hasteMain;
完成后,您可以使用 require 将 hello.js 作为模块加载并运行代码:
hasteMain = require('./hello.js');
hasteMain();
您可能还想查看 ghcjs。React 团队最近将其中一个模块从 haste 移到了 ghcjs