问题标签 [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.
haskell - Yesod - 服务器和客户端之间的共享类型
我习惯使用 Dart,在服务器和客户端之间共享类型就像将相关包导入项目一样简单。
Yesod/Haskell 可以完成类似的事情吗?我应该为客户端使用 GHCJS 吗?也许榆树?目标是不必担心数据在服务器和客户端之间的传输中被破坏——也不必编写一行 JS。:o)
我还没有找到任何关于如何使用 Haskell 最好地应对这一挑战的好的、适合初学者的文档。我怀疑我只是没有找对地方。任何和所有的帮助都非常受欢迎。
haskell - 是否有将 NodeList 转换为真实列表(ghcjs-dom)的内置函数?
如何将其结果转换Element.querySelectorAll body "h1"
为. 我知道我可以自己编写一个函数。有内置函数吗?IO NodeList
IO (List Node)
haskell - 使用 ghcjs-dom 过滤 [Node] 到 [Element]
我正在使用 ghcjs-dom。如何从节点数组中过滤元素?
或者
haskell - 从 Webkit 导入 documentCreateElement 函数
我正在尝试导入documentGetElementById
函数以用于Reflex FRP
. 我尝试了下面的导入,但找不到该功能(根据hackage应该在那里):
我将不胜感激帮助解决这个问题。我正在使用ghc 8.0.1
webkit 现在工作的 mac 上运行最新的 Reflex 平台构建。我在 Linux 上也看到了同样的问题。因此,它似乎不是特定于平台的。
我也做了github 代码搜索,ghcjs-dom
但documentGetElementById
没有出现。那么,也许它已经转移到其他地方了?
haskell - 在 Either 中包装 JavaScript FFI
我很陌生JavascriptFFI
,非常感谢这里的帮助。
我有一个有效的javascript代码来FILE URI
从相机中获取图像(通过cordova相机插件)。现在,它可以在成功时返回错误或文件 uri。我们想将它们映射到Left Int Text
and Right GHCJS.DOM.Types.File
(不确定我是否得到了FILE URI
正确的类型)。
这是 javascript 代码(未经测试,因为我将其从测试代码中修改为仅返回 fileuri 或错误,而不是在浏览器中显示它)。
我将欣赏有关如何navigator.camera.getPicture
使用 ghcjs-dom-0.2.3.1(我将其与 Reflex 一起使用)进行 FFI 的指示,以使返回的结果在 Either 中。
然后我可以将其包装起来File URI
(ByteString
我认为首先通过 Cordova 文件 api 将其转换为arraybuffer
)并将其发送到删除服务器以进行持久性。
haskell - getCurrentTime 在 GHCJS 下是如何工作的?
在 GHCJS 下,如何getCurrentTime
工作?在time
库本身中,这是使用 FFI 实现的,调用操作系统提供的函数。但是,没有任何以time
以下开头的行:
我检查了shims
GHCJS 用来修补库的存储库。它修补了时区获取功能,但没有提及getCurrentTime
. 我发现的唯一一个远程接近的地方是ghcjs-boot
,其中old-time
修补了:
但这有两个问题。一是它不是正确的库(old-time
而不是time
)。另一个是它仍在使用 C FFI。我不明白使用 GHCJS 编译时如何使用 C FFI。
那么,getCurrentTime
GHCJS 在哪里被填充?
为了回应关于 grepping ghcjs 源的评论,如果我getTime
在 GHCJS 的源中搜索(我相信这将是使用的 javascript 函数),我基本上什么也得不到。但是,all.js
通过 grepping GHCJS 为使用的项目生成的文件getCurrentTime
,我得到了这个:
后三个来自某种文件系统垫片。
我在生成的 javascript 中找到了这个:
但这个问题是如何联系在一起的,这个问题仍然存在。
haskell - 如何使用 haskell stack 1.2、nix 和 ghcjs
当我尝试使用最新版本的堆栈构建此存储库时:
我收到此错误:
这是因为我的 stack.yaml 看起来像这样:
非常不幸的是,他们取消了对我使用的方法的支持。还有其他方法可以使用堆栈、nix 和 ghcjs 吗?我必须回到使用 cabal 吗?
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:我刚刚记得的其他事情(可能与问题相关)是在我的代码的另一个地方,我使用hexadecimal
过Data.Text.Lazy.Builder.Int。但是,使用 ghcjs,此模块不会导出此函数。我很乐意将它贡献给上游的某个地方,但由于我不明白其中的所有模块text
是如何被填充的,所以我不知道合适的上游在哪里。如果有人能指出完成此操作的特定文件,我将不胜感激。
haskell - Websockets 上 GHCJS 代码最有效的有线格式
我正在开发一个 Haskell 应用程序,该应用程序在使用 GHCJS 编译的浏览器中运行,该应用程序通过 websockets 与同样用 Haskell 编写的服务器通信。两个程序共享相同的 Haskell 数据类型定义,我“只是”必须选择序列化格式。
目前,为简单起见,程序在Read
and上运行Show
,它可以工作,但显然并不理想。
另一方面,目前还不清楚快速序列化的常用竞争者,例如cereal
库,ByteStrings
在 GHCJS 中是否真的有效。此外,GHCJS 的 API 似乎很难让与JavaScript 绑定到 Websockets 提供ByteStrings
的二进制类型进行交互。Blob
通用代码生成(使用GHC.Generics
)会很好。
以前有没有人解决过这个问题?甚至可能对 GHCJS 上的各种序列化变体进行基准测试?