如何从 haskell 源文件快速生成 .js 文件?

How to produce a .js file from a haskell source file with haste?

所以我注意到,在回答 时,提出问题的人似乎是 java 脚本开发人员。由于我在 haskell 中编写的代码非常简单,所以我想我赶快尝试将其编译为 javascript。

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

PS E:\h\Whosebug> 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 脚本源文件?

您的源目录中是否可能有旧版本的 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 的图片。

(回复:MSI 安装程序需要重启,这是必需的,因为它将 Haste 二进制文件添加到您的 %PATH%,不会立即生效。我假设重新登录就足以使但是,它会生效。)