问题标签 [ghcjs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
105 浏览

xmlhttprequest - 使用 GHCJS XHR 发送二进制数据

我有一个需要在 GHCJS 中通过 XHR 发送的 ByteString,但我一生都无法弄清楚如何将该 ByteString 放入 XHR 的 RequestData

显然TypedArrayData是我需要使用的,但我完全没有运气弄清楚如何将 ByteString 转换为适合其中的内容。我看着这个,我尝试了这样的事情。

但由于某种原因,我遇到了一个奇怪的错误。

据我所知,这些类型没有理由不兼容。

0 投票
2 回答
257 浏览

haskell - 为持续可测量的现象创建行为

我想Behavior t a从 an创建一个IO a,其预期语义是每次行为为sampled 时都会运行 IO 操作:

我希望我可以通过执行measurementin a来做到这一点pull

然而,结果Behavior在初始阶段后永远不会改变measure

我能想出的解决方法是创建一个Behavior“足够频繁”更改的虚拟对象,然后创建一个虚假的依赖项:

然后按预期工作;但由于Behaviors 无论如何只能按需采样,因此没有必要这样做。

创建一个Behavior连续的、随时可观察的现象的正确方法是什么?

0 投票
1 回答
117 浏览

haskell - 表示时间戳

我想代表来自HTMLMediaElement. 它的定义特征是:

  • 它的值表示为Double
  • 可以随时使用getCurrentTime :: IO Double(部分应用于给定的HTMLMediaElement)查询它
  • 它可能会不断变化(无论何时播放媒体播放器)

我最初的计划是将其表示为每次观察时都会Behavior t Double重新运行IO Double,但效果并不好。

我尝试过的事情:

  • 如本问题的解决方法部分所述,使用Behavior以固定频率在引擎盖下刺激的
  • 传递一个Event t ()表示所需采样频率的,并返回一个Event t Double包含重合时间戳的

我也不喜欢——第一个要么将行为(抱歉)与我的特定用例(如果我使用我将在我的应用程序中使用的最终采样频率)过度结合,要么看起来很浪费(如果我使用某些东西)就像创建时的 1 kHz 采样Behavior,然后在应用程序端以 60 Hz 采样),如果您想以不同的采样率对时间戳做不止一件事,第二个是非常不灵活的。

0 投票
0 回答
253 浏览

haskell - 如何使用 ghcjs 减少(增量)编译时间?

我有一个使用 ghcjs 的小项目,目前最好的增量重新编译时间为 8 秒,源代码只有区区 637 行(按 计find -L . -name '*.hs' | xargs wc -l | grep total)。

最严重的违规者是最后Linking client/Main.jsexe一步,这需要 3.8 秒,并且在每次增量构建时都会发生。

第二个最严重的违规者是一个Linking Template Haskell步骤,大约需要 2 秒。这也发生在每次增量重建中,它来自于有几个foreign import javascript声明。即使我将这些声明移到一个单独的模块/文件中,我再也不会接触到,接触代码库中任何文件的增量构建也会导致这个链接步骤发生。

最后几秒钟来自实际编译我的源文件。把它弄下来也很好,但这不是一个问题。

如何实现更紧密的编译/反馈循环?

0 投票
1 回答
293 浏览

haskell - 将 requestAnimationFrame 转为 Event t()

使用 Reflex-DOM,我想Event t ()在浏览器准备好绘制下一帧时触发,即触发时requestAnimationFrame触发。我试过这样:

我的测试应用程序如下:

但是,计数并没有增加。然而,在浏览器的 JS 控制台上,我确实看到了两者about to fire the eventevent fired重复打印。

0 投票
1 回答
157 浏览

haskell-stack - ghc-mod 是否支持 ghcjs?

截至 2016 年 5 月,ghc-mod 是否支持使用 ghcjs 编译的项目?

我意识到在很多情况下,源是相同的,但在使用 ghcjs-dom 库时情况并非如此。

我目前有 2 个项目文件夹,配置了堆栈。从这些文件夹之外:

完美运行。这里的stack.yaml文件指定了ghc-7.10.2

失败。这里的stack.yaml文件指定了ghcjs-0.2.0.0_ghc-7.10.2

这是预期的行为吗?我无法告诉 frrm 功能请求和 wiki 的当前状态是什么。

0 投票
1 回答
1350 浏览

haskell - 从堆栈安装 ghcjs

我通过堆栈安装了 GHC(因此stack ghc -- --version显示 GHC-7.10.3)

一些资源表明ghcjs有些实验性(尽管在进一步的阶段)。


看着http://docs.haskellstack.org/en/stable/ghcjs/我想也许我可以找到stack.yaml并改变它。

要将 GHCJS 与 stack >= 0.1.8 一起使用,请将 GHCJS 版本放在 stack.yaml 的编译器字段中......然后stack setup

我们被告知看config.yaml哪个看起来同样空白。这对不对,我是不是走上了死胡同?

我只想ghcjs用堆栈安装。

0 投票
1 回答
163 浏览

postgresql - GHCJS 是否可以重用 Template Haskell 生成的代码

此时 GHCJS 无法编译postgresql-simple包(参见 [ 1 ])。我想使用persistent包来生成数据库模型。我想知道是否可以使用 GHC 本身编译模型并在 GHCJS 源代码中重用由 Template Haskell 生成的代码?


我已经为我的问题找到了解决方法,但是这个问题仍然相关。我会让它打开几天,如果没有人回答如何使用 Template Haskell 生成的代码,我会关闭它。我已将生成的代码粘贴在底部。

更新
thomie建议我-dth-dec-file标记,它可以写为模型文件中的语言编译指示,例如{-# OPTIONS_GHC -dth-dec-file #-}. 然后运行命令后,文件夹下stack build有一个文件。这个文件看起来像有效的 Haskell,但是 GHC 因为解析错误而拒绝了它(见底部的代码)。但是,我找到了一种使用 GHCJS 编译模型的方法。我在 cabal 文件中添加了条件以从依赖项中删除:Model.th.hs.stack-work/dist/<arch>/<cabal-version>/build/srcpostgresql-simple

由 Template Haskell 生成的代码(为了测试此代码,我将此文件复制到项目源文件夹中并在顶部添加了模块声明)

错误信息报告解析错误->在线开始GHC.Base.Nothing ->

0 投票
2 回答
200 浏览

haskell - 如何将列表转换为 JSVal?

我正在尝试为一些 JS 库构建 JS FFI 以使其与 GHCJS 一起使用,我需要将列表转换为单个 JSVal

但得到错误

显然,我需要 concat 函数,但使用mconcat给出

也许,有更简单的方法可以正确地进行这种转换?

0 投票
1 回答
547 浏览

javascript - 使用 Haskell 的 javascript 库

我对 Haskell 相当陌生。最近,我听说了一个名为 GHCJs 的编译器,您可以在其中使用 Haskell 编写代码,然后将其编译为 Javascript。

我对使用诸如three.js 和webgl 之类的库来制作很酷的交互式3d 动画很感兴趣。使用 GHCJ 时是否可以从 Haskell 调用这些 javascript 库?