Lan*_*nbo 5 binary haskell recursive-datastructures bytestring
Data.Binary是很棒的.我只有一个问题.我们假设我有一个这样的数据类型:
import Data.Binary
data Ref = Ref {
refName :: String,
refRefs :: [(String, Ref)]
}
instance Binary Ref where
put a = put (refName a) >> put (refRefs a)
get = liftM2 Ref get get
Run Code Online (Sandbox Code Playgroud)
很容易看出这是一个递归数据类型,因为Haskell是懒惰的.由于Haskell作为一种语言既不使用引用也不使用指针,而是按原样呈现数据,我不确定如何保存它.我有强烈的迹象表明,这种天真的责备将导致无限的字节串......
那么如何安全地保存这种类型呢?
如果你的数据没有周期,那你就没事了.但是一个循环,就像
r = Ref "a" [("b", r)]
Run Code Online (Sandbox Code Playgroud)
确实会产生无限的结果.解决这个问题的唯一方法是为所有节点提供唯一标签,并在转换为二进制文件时使用这些标签来避免循环.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |