Haskell を使用して、単純な (しかし非常に大きな) ツリー構造をバイナリ ファイルに保存しようとしています。構造は次のようになります。
-- 簡単にするために、各ノードには 4 つの子のみがあると仮定します。 データ ツリー = ノード [ツリー] | リーフ [中]そして、ディスク上でデータをどのように表示する必要があるかを次に示します。
- 各ノードは、その子への 4 つの 32 ビット オフセットで始まり、子に続きます。
- リーフについてはあまり気にしません。たとえば、n 個の連続した 32 ビットの数字だとしましょう。
- 実用的な目的で、いくつかのノード ラベルやその他の追加データが必要になりますが、今のところ、どちらもあまり気にしません。
Haskeller がバイナリ ファイルを作成する際に最初に選択するのは、Data.Binary.Put ライブラリであるように思えます。しかし、それで私は箇条書き#1に問題があります。特に、ノードをファイルに書き込もうとしているときに、子のオフセットを書き留めるには、現在のオフセットと各子のサイズを知る必要があります。
これは Data.Binary.Put が提供するものではないので、Monad トランスフォーマーの完璧なアプリケーションに違いないと思いました。しかし、クールで機能的に聞こえますが、これまでのところ、このアプローチは成功していません。
こことここで問題を解決するのに役立つと思われる他の 2 つの質問をしました。私は、私がさらに進歩するのに役立つ非常に素晴らしい回答を受け取るたびに、残念ながら私はまだ問題を全体的に解決することができていないと言わなければなりません.
ここに私がこれまでに得たものがありますが、まだメモリリークが多すぎて実用的ではありません。
このような機能的なアプローチを使用するソリューションがあれば幸いですが、他のソリューションにも感謝します。