タプルは自然な型であると考えているので、タプルに複数の値を集めることがよくあります。ただし、タプルは厳密ではありません。したがって、考慮することGHCのネストされたUNPACK
data A
data B =
B !A
data C =
C !(B, B)
data D =
D !B !B
-funbox-strict-fields
と最適化では、UNPACKはネストされています。 C
のタプルは、D
のようにC A A
に解凍されるか、またはC B B
となるでしょうか? GHC-docの参考資料は7.16. Pragmasです。
(??タイプのコンストラクタ空でないタプルタイプある)
私の質問でエラーが修正されました。データBはデータB = B!Aでなければなりません。だからCでは、タプルの代わりに厳密なフィールドを持つ独自の特殊型を使うべきですか?私はGHCがタプルを見つけた後も引き続き展開できることを期待していたので、各フィールドに特化した多くのデータ型を書く必要はありません。 (しかし、私はタプルで値を集めるので、おそらく値の集合の抽象的な考えがあるので、おそらく特殊なバージョンを使うべきです...) – telephone
タプルが多形でない場合は、私は以前この問題について書きました:http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/ –
私が見てきたようにデータ型の厳密なフィールドとして使用されるGHC-docの例が平坦化されます。 – telephone