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
これが再帰的なデータ型であることは簡単にわかります。これは、Haskell が遅延型であるため機能します。言語としての Haskell は参照もポインターも使用せず、データをそのまま表示するため、これがどのように保存されるかはわかりません。私は、この素朴な非難が無限のバイトストリングにつながるという強い兆候を持っています...
では、この型を安全に保存するにはどうすればよいでしょうか。