0

如果我有一个文件,hello.hs:

main = putStrLn "Hello, World!"

我可以使用 haste 命令将其编译为 hello.js:

hastec hello.hs

如何在 nodejs 下运行结果 hello.js 文件?

4

2 回答 2

0

默认情况下,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
于 2017-07-20T13:15:45.250 回答
0

haste 不知道节点,所以 .js 文件中的生产不导出任何东西。

您需要以某种方式扩充 .js 文件以导出所需的功能,即您需要导出 hasteMain() 函数。

您可以尝试使用 --with-js 命令行选项来 hastec

或者您可以简单地将以下行附加到 hello.js 文件的末尾:

module.exports = hasteMain;

完成后,您可以使用 require 将 hello.js 作为模块加载并运行代码:

hasteMain = require('./hello.js');
hasteMain();

您可能还想查看 ghcjs。React 团队最近将其中一个模块从 haste 移到了 ghcjs

于 2017-07-19T20:42:19.093 回答