1

以下のようなデータ型 (GHC プリミティブ型から構成される)の格納可能なベクトルインスタンスをどのように定義しますか。

data Atoms =  I GHC.Int.Int32|S GHC.Int.Int16 -- define a union data type

この保存可能なチュートリアルを確認しましたが、上記のようなユニオンではなく、同じタイプのベクトルに対してのみ機能します。

4

1 に答える 1

4

何らかの形で型をインスタンス化するために使用したコンストラクターをエンコードする必要があります。

たとえば、使用されたコンストラクターのインデックスを指定するバイトを追加できます。これは、上記の値を次のように格納できることを意味します。

Haskell    Binary
I 3     -> 00 00 00 00 03
S 4     -> 01 00 04 XX XX
              ^ Data
           ^ Constructor index
XX = unused byte

次に、バイト文字列から値を逆シリアル化したい場合は、最初のバイトをピークし、それがどのインデックスであるかを確認し、それに基づいて使用するコンストラクター (および次に何をピークするか) を選択します。

于 2011-12-08T22:03:52.417 に答える