我对 Haskell 相当陌生。最近,我听说了一个名为 GHCJs 的编译器,您可以在其中使用 Haskell 编写代码,然后将其编译为 Javascript。
我对使用诸如three.js 和webgl 之类的库来制作很酷的交互式3d 动画很感兴趣。使用 GHCJ 时是否可以从 Haskell 调用这些 javascript 库?
我对 Haskell 相当陌生。最近,我听说了一个名为 GHCJs 的编译器,您可以在其中使用 Haskell 编写代码,然后将其编译为 Javascript。
我对使用诸如three.js 和webgl 之类的库来制作很酷的交互式3d 动画很感兴趣。使用 GHCJ 时是否可以从 Haskell 调用这些 javascript 库?
是的,您可以从 ghcjs 编译的 Haskell 调用 Javascript 库。
这是一个简单的例子:
{-# LANGUAGE JavaScriptFFI #-}
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.JSString as T
import qualified GHCJS.Foreign
foreign import javascript unsafe "alert($1)" alert :: T.JSString -> IO ()
main = alert "hello world"
正如你从这个例子中看到的,你使用这个foreign import javascript
特性使 JS 函数在你的 Haskell 程序中可用。
我不确定是否有官方的 WebGL 接口库,但在网上快速搜索显示其他人已经创建了部分接口库——例如,请参阅这个示例。基本上,您必须为foreign
应用程序使用的函数创建声明。
对于three.js,我找到了这个github repo:
https://github.com/manyoo/ghcjs-three
也可以从 JS 调用 Haskell 代码,即看这个 SO 线程: