2017-07-19 37 views

回答

0

默认情况下,当浏览器的onload事件触发时,Haste的main设置为执行。这显然是没有意义的节点,所以你需要通过--onexec标志编译程序时的急速

$ hastec --onexec hello.hs 

急速使用节点,以这种方式运行其测试套件。但是,请注意,除了写入标准输出(如putStrLn)之外,Haste不会将系统操作(文件IO等)映射到节点等价物。如果您正在编写需要与操作系统交互的应用程序,最好使用vanilla GHC。

更新: 谢谢你,很好的答案。回顾一下,如果你想在节点下编译并运行hello.hs,那么这两条线就是:

hastec --onexec hello.hs 
node hello.js 
+0

valderman,你说得对,使用香草GHC更好。但是我在想,如果我或者其他人想要为那些不在乎模块是用Haskell编写的人编写可重用的节点模块,这将是一个很好的选择。我意识到文件IO和所有不存在的内容,但是GHC中的外部函数接口功能应该足够用于有线连接了。 – zumalifeguard

+0

当然,使用Haste完全可以做到这一点,但它需要一些额外的工作(即所有FFI的东西)。 – valderman

0

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

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

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

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

module.exports = hasteMain; 

一旦你这样做这一点,你可以加载hello.js为使用需要的模块和运行代码:

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

您可能也想看看ghcjs。 React团队最近将其中一个模块从急速移动到ghcjs

相关问题