厳密なデータ構造を実装するライブラリはありますか?具体的には、私は厳格なリストと厳密なセットを探しています。Haskellの厳密なデータ構造のライブラリ
免責事項:
私はdeepseqの承知しています。これは非常に便利ですが、deepseqを使用するたびにデータ構造全体をトラバースするオーバーヘッドが追加されます(複数回でも可能です)。
私は厳格な容器状のデータ構造は それは十分に評価されますが含まれ、すべてを保証するものではないことを認識していますが、構造は 自体は、例えば厳格でなければなりません:
data StrictList a = !a :$ !(StrictList a) | Empty
(ここで、含まれている要素はWHNF内にあり、完全に評価されていない可能性がありますが、リストの構造は無限の値です)。
私はハッキングの 'strict'パッケージについて知っていますが、それは非常に limiteを持っています厳密なデータ構造のセット。厳密な リストもセットも含まれていません。厳格なリストを書く
自身が驚くほど簡単なようだ(私はところで、関数子、Traversableのと折り畳み式を導出するGHCの 拡張を愛しています。)が、それはより良い別のライブラリで行われますようにそれは まだいるようです。そして セットの効率的な実装は私にとってはそれほど簡単ではないようです。
なぜ厳格な構造が必要ですか? – fuz
@ FUZxxl物事が遅れずに評価されるようにして、スペースの使用を減らし、計算をもっと速くすることができます。逆効果もあるので、遅延構造も重要です。効率的なコードのためには、両方が必要です(どこで使用するかを知っておく必要があります)。 –
@FUZxxl:SetからState Monadのようなことをしていましたが、セットから要素を挿入したり削除したりすることは頻繁にありましたが、しばらくはSetを評価しませんでした。この結果、スペースリークが発生しました。スペースリークは、spine-strict(John Lのおかげで)データ構造で修正される可能性がありました。 – shahn