2017-07-19 75 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

相關問題