2

我是 Frege 的新手,虽然我知道 Java 和 Haskell。

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

特别是,我查看了PreludeArrays.fr我注意到PrimitiveArrayElement除了. byte

我觉得我缺少一些明显的东西。如何在 Frege 中处理二进制数据?有没有如何做到这一点的例子?

4

1 回答 1

1

确实有这样的例子。只是因为技术原因不能进去PreludeArrays。相反,它存在于frege.java.Lang、 whereByteShort被介绍的地方。

即使没有,你也可以简单地说

instance PrimitiveArrayElement Byte

它应该可以工作。

关于您的问题:我认为可以肯定地说,JArray Byte对于任何数据的任何问题都可以。另一个问题是它是否是最好的代表。例如,如果这些数据实际上是 UTF8 字符串,我认为转换成String将是要走的路。

需要考虑的事项

  1. mapArray,foldArray和朋友是节省空间的,但严格且有点慢,因为他们使用STmonad。
  2. 相反,map并且fold相当快,但当然会浪费大量内存。

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

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

于 2015-08-11T17:40:40.970 回答