如何使用haste从haskell源文件生成.js文件?

时间:2016-10-26 09:05:45

标签: haste

所以我在回答this question时注意到,提出问题的人似乎是一名javascript开发人员。而且我在haskell中编写的代码很简单,我认为我试着尝试将其编译为javascript。

所以,我下载了急速的Windows二进制包(为什么.msi需要重启?!!?),将其添加到我的路径,发布haste-cabal updatehaste-cabal install split并稍后阅读hastec --help的输出,我发布了:

PS E:\h\stackoverflow> hastec -o hexagon.js --pretty-print hexagon.hs
作为我对如何获得我正在寻找的输出的最佳猜测。

与我的期望相反,急速输出是这样的:

hastec.exe: user error (shell expression failed in readModule: Data.Binary.Get.runGet at position 8: not enough bytes)

所以,我的问题是:如何获取java脚本源文件?

1 个答案:

答案 0 :(得分:1)

是否有可能存在旧版本的Haste,或者您的源目录中的编译器的不同版本具有中间文件(例如.jsmod)?这听起来像Haste在遇到损坏的中间文件时产生的(非常无用的)错误消息。

检查您调用的二进制文件的版本是否符合预期(hastec --version)。然后,尝试删除目录中的所有中间文件以及%USERPROFILE%\AppData\Roaming\haste中的所有文件,重新安装split,并使用-fforce-recomp标志重新编译。您还应该添加main函数,以便Haste有一个程序入口点,从该程序开始链接。如果你想做的就是让一些Haskell函数可用于外部JavaScript,你可以使用export foreign function interface

{-# LANGUAGE OverloadedStrings #-}
module Main where
import Haste.Foreign
import Hexagon

main = export "picture" Hexagon.picture

您可能还希望使用--onexec标志编译程序,以确保main在加载时立即运行并导出picture,而不是在页面加载时默认值:

> hastec -o hexagon.js --pretty-print --onexec hexagon.hs

执行此操作后,hexagon.js之后包含的任何代码都可以调用,例如Haste.picture(5);以生成尺寸为5的图片。

(Re:MSI安装程序需要重新启动,这是必需的,因为它会将Haste二进制文件添加到%PATH%,这不会立即生效。我认为重新登录就足以让它成功然而,效果。)