我是弗雷格的新手,虽然我知道Java和Haskell。
我正在移植一些使用ByteString
的Haskell代码,我正试图找出在Frege中使用的内容。我假设我想使用其基础Java表示为byte[]
的东西,但我不确定弗雷格是如何包装它的。
特别是,我浏览了PreludeArrays.fr
,并注意到除了 PrimitiveArrayElement
之外,每个原始Java类型都有byte
的实例。
我觉得我有一些明显缺失的东西。我如何处理弗雷格的二进制数据?有没有如何做的例子?
答案 0 :(得分:1)
实际上有这样一个例子。由于技术原因,它无法进入PreludeArrays
。相反,它位于frege.java.Lang
,其中引入了Byte
和Short
。
即使没有,你也可以说
instance PrimitiveArrayElement Byte
它应该有效。
关于你的问题:我认为可以安全地说JArray Byte
对于任何数据的任何问题都应该没问题。另一个问题是它是否是最好的代表。例如,如果这些数据实际上是UTF8字符串,我认为转换为String
将是可行的方法。
需要考虑的事项
mapArray
,foldArray
和朋友节省空间,但严格且有点慢,因为他们使用ST
monad。map
和fold
相当快,但当然浪费了很多记忆。我在frege.data.Hashmap
中使用的方法是识别非常基本的数组操作并用Java实现它们(一个可以在线实现,甚至),并根据这些来编写程序的其余部分。
您可能需要查看源代码以了解如何执行此操作。