は、次のように私はタイプを作成したと想定しますHaskellで型のサイズを調べるにはどうしたらいいですか?
data RequestAck =
RequestAck { ackOK :: Word32, ackMsgCode :: Word32 }
私はそれは大きな2 * 4バイトであることを確認し、一定のどこかにいることを行うことができます。
唯一の問題は、タイプにフィールドを追加すると、定数を更新することを忘れてしまいます。
特定のタイプのサイズを提供する機能がありますか?たとえばt -> Int
?私が欲しいものに近づく
機能はData.Generics.Schemesモジュール内部の
gsize :: Data a => a -> Int
ですが、私は私のタイプData
のインスタンスを作成する必要がありますする必要はありません。
より一般的な解決策はありますか?
確かに、静的型で動作する関数を探しています。たとえば、インスタンスを渡すのではなく、型自体を渡すことができます。
ヒント:それは大きな2つの* 4バイトではありません。フィールドはボックス化されています。 –
良い点。私の場合、私は単語を引き出し、2 * 4バイトの長さに終わるバイトテストに変換します。だから、振り返ってみると、そのタイプのサイズを得ることはそれのために私には意味をなさないでしょう。 –
"Haskellデータ型のメモリフットプリント":http:// stackoverflow。com/questions/3254758/memory-footprint-of-haskell-data-types、「GHCのデータ表現のメモリ表現の見方」http://stackoverflow.com/questions/6574444/how-to-find-out -ghcs-memory-data-representations-of-data-types –