问题标签 [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 投票
1 回答
329 浏览

haskell - Yesod - 服务器和客户端之间的共享类型

我习惯使用 Dart,在服务器和客户端之间共享类型就像将相关包导入项目一样简单。

Yesod/Haskell 可以完成类似的事情吗?我应该为客户端使用 GHCJS 吗?也许榆树?目标是不必担心数据在服务器和客户端之间的传输中被破坏——也不必编写一行 JS。:o)

我还没有找到任何关于如何使用 Haskell 最好地应对这一挑战的好的、适合初学者的文档。我怀疑我只是没有找对地方。任何和所有的帮助都非常受欢迎。

0 投票
1 回答
63 浏览

haskell - 是否有将 NodeList 转换为真实列表(ghcjs-dom)的内置函数?

如何将其结果转换Element.querySelectorAll body "h1"为. 我知道我可以自己编写一个函数。有内置函数吗?IO NodeListIO (List Node)

0 投票
1 回答
72 浏览

haskell - 使用 ghcjs-dom 过滤 [Node] 到 [Element]

我正在使用 ghcjs-dom。如何从节点数组中过滤元素?

或者

0 投票
1 回答
85 浏览

haskell - 从 Webkit 导入 documentCreateElement 函数

我正在尝试导入documentGetElementById函数以用于Reflex FRP. 我尝试了下面的导入,但找不到该功能(根据hackage应该在那里):

我将不胜感激帮助解决这个问题。我正在使用ghc 8.0.1webkit 现在工作的 mac 上运行最新的 Reflex 平台构建。我在 Linux 上也看到了同样的问题。因此,它似乎不是特定于平台的。

我也做了github 代码搜索ghcjs-domdocumentGetElementById没有出现。那么,也许它已经转移到其他地方了?

0 投票
0 回答
79 浏览

haskell - 在 Either 中包装 JavaScript FFI

我很陌生JavascriptFFI,非常感谢这里的帮助。

我有一个有效的javascript代码来FILE URI从相机中获取图像(通过cordova相机插件)。现在,它可以在成功时返回错误或文件 uri。我们想将它们映射到Left Int Textand Right GHCJS.DOM.Types.File(不确定我是否得到了FILE URI正确的类型)。

这是 javascript 代码(未经测试,因为我将其从测试代码中修改为仅返回 fileuri 或错误,而不是在浏览器中显示它)。

我将欣赏有关如何navigator.camera.getPicture使用 ghcjs-dom-0.2.3.1(我将其与 Reflex 一起使用)进行 FFI 的指示,以使返回的结果在 Either 中。

然后我可以将其包装起来File URIByteString我认为首先通过 Cordova 文件 api 将其转换为arraybuffer)并将其发送到删除服务器以进行持久性。

0 投票
0 回答
154 浏览

haskell - getCurrentTime 在 GHCJS 下是如何工作的?

在 GHCJS 下,如何getCurrentTime工作?在time库本身中,这是使用 FFI 实现的,调用操作系统提供的函数。但是,没有任何以time以下开头的行:

我检查了shimsGHCJS 用来修补库的存储库。它修补了时区获取功能,但没有提及getCurrentTime. 我发现的唯一一个远程接近的地方是ghcjs-boot,其中old-time修补了:

但这有两个问题。一是它不是正确的库(old-time而不是time)。另一个是它仍在使用 C FFI。我不明白使用 GHCJS 编译时如何使用 C FFI。

那么,getCurrentTimeGHCJS 在哪里被填充?

为了回应关于 grepping ghcjs 源的评论,如果我getTime在 GHCJS 的源中搜索(我相信这将是使用的 javascript 函数),我基本上什么也得不到。但是,all.js通过 grepping GHCJS 为使用的项目生成的文件getCurrentTime,我得到了这个:

后三个来自某种文件系统垫片。

我在生成的 javascript 中找到了这个:

但这个问题是如何联系在一起的,这个问题仍然存在。

0 投票
0 回答
460 浏览

haskell - 如何使用 haskell stack 1.2、nix 和 ghcjs

当我尝试使用最新版本的堆栈构建此存储库时:

我收到此错误:

这是因为我的 stack.yaml 看起来像这样:

非常不幸的是,他们取消了对我使用的方法的支持。还有其他方法可以使用堆栈、nix 和 ghcjs 吗?我必须回到使用 cabal 吗?

0 投票
1 回答
528 浏览

haskell - GHCJS 文本数据构造器

我正在使用带有反射平台的 nix 来使用 GHCJS 8.0.1 将 haskell 编译为 javascript。我已经编写了一些依赖于text库中的内部模块的函数:Data.Text.Internal. 我唯一需要的是数据构造函数Text

但是,当我尝试使用 GHCJS 编译使用此数据构造函数的代码时,它会失败。错误消息清楚地表明,不知何故,数据构造函数Text已被替换为:

我知道我可以#ifdef在代码块周围放置 s 来解决这个问题。但是,我无法弄清楚这个数据构造函数替换是如何完成的。中的任何地方都没有提到这一点ghcjs-shims。也没有提到ghcjs。更奇怪的是,它ghcjs-base具有使用普通数据构造函数的函数Text。如果有人能指出这个替换的来源,我将不胜感激。

编辑:这与问题无关,但我需要使用内部的原因Text是有效地编码 IPv4 地址和 MAC 地址等内容。在我包含在上一个问题中的基准测试中,我发现使用公共 API 的最快 IPv4 编码text大约需要 450ns。使用内部(并直接写入可变数组),我可以在大约 35ns 内完成此操作,这至少提高了 10 倍的性能。

编辑2:我刚刚记得的其他事情(可能与问题相关)是在我的代码的另一个地方,我使用hexadecimalData.Text.Lazy.Builder.Int。但是,使用 ghcjs,此模块不会导出此函数。我很乐意将它贡献给上游的某个地方,但由于我不明白其中的所有模块text是如何被填充的,所以我不知道合适的上游在哪里。如果有人能指出完成此操作的特定文件,我将不胜感激。

0 投票
1 回答
328 浏览

haskell - Websockets 上 GHCJS 代码最有效的有线格式

我正在开发一个 Haskell 应用程序,该应用程序在使用 GHCJS 编译的浏览器中运行,该应用程序通过 websockets 与同样用 Haskell 编写的服务器通信。两个程序共享相同的 Haskell 数据类型定义,我“只是”必须选择序列化格式。

目前,为简单起见,程序在Readand上运行Show,它可以工作,但显然并不理想。

另一方面,目前还不清楚快速序列化的常用竞争者,例如cereal库,ByteStrings在 GHCJS 中是否真的有效。此外,GHCJS 的 API 似乎很难让与JavaScript 绑定到 Websockets 提供ByteStrings的二进制类型进行交互。Blob

通用代码生成(使用GHC.Generics)会很好。

以前有没有人解决过这个问题?甚至可能对 GHCJS 上的各种序列化变体进行基准测试?

0 投票
1 回答
255 浏览

haskell - 如何将 ghcjs 添加到路径?

为了安装ghcjs,我升级到了 Ubuntu 16.04

要求没有问题。 alex以及happy自动安装的位置。然后:

但是,我不能从终端调用 ghcjs。也许它不在PATH中?

如何添加到路径?