我如何在 Frege 中处理二进制数据?

How can I handle binary data in Frege?

我是弗雷格的新手,虽然我知道 Java 和 Haskell。

我正在移植一些使用 ByteString 的 Haskell 代码,我正在尝试弄清楚在 Frege 中使用什么。我假设我想要使用其底层 Java 表示为 byte[] 的东西,但我不确定弗雷格如何包装它。

特别是,我查看了 PreludeArrays.fr,我注意到每个原始 Java 类型 除了 都有一个 PrimitiveArrayElement 的实例byte.

我觉得我明显遗漏了什么。我如何着手处理 Frege 中的二进制数据?是否有任何示例说明如何这样做?

还真有这样的例子。由于技术原因,它不能在 PreludeArrays 中。相反,它位于 frege.java.Lang 中,其中引入了 ByteShort

即使有 none,你也可以说

instance PrimitiveArrayElement Byte

它应该可以工作。

关于您的问题:我认为可以肯定地说 JArray Byte 应该可以解决任何数据问题。另一个问题是它是否是最好的表示。例如,如果这些数据实际上是 UTF8 字符串,我认为转换为 String 是可行的方法。

需要考虑的事情

  1. mapArrayfoldArray 和朋友 space 高效,但严格且有点慢,因为他们使用 ST monad。
  2. 相反,mapfold 相当快,但当然会浪费大量内存。

我在 frege.data.Hashmap 中使用的一种方法是识别非常基本的数组操作并在 Java 中实现它们(甚至可以在线执行此操作),然后编写其余的程序方面的那些。

您可能想查看源代码以了解如何执行此操作。