以下のようなデータ型 (GHC プリミティブ型から構成される)の格納可能なベクトルインスタンスをどのように定義しますか。
data Atoms = I GHC.Int.Int32|S GHC.Int.Int16 -- define a union data type
この保存可能なチュートリアルを確認しましたが、上記のようなユニオンではなく、同じタイプのベクトルに対してのみ機能します。
以下のようなデータ型 (GHC プリミティブ型から構成される)の格納可能なベクトルインスタンスをどのように定義しますか。
data Atoms = I GHC.Int.Int32|S GHC.Int.Int16 -- define a union data type
この保存可能なチュートリアルを確認しましたが、上記のようなユニオンではなく、同じタイプのベクトルに対してのみ機能します。
何らかの形で型をインスタンス化するために使用したコンストラクターをエンコードする必要があります。
たとえば、使用されたコンストラクターのインデックスを指定するバイトを追加できます。これは、上記の値を次のように格納できることを意味します。
Haskell Binary
I 3 -> 00 00 00 00 03
S 4 -> 01 00 04 XX XX
^ Data
^ Constructor index
XX = unused byte
次に、バイト文字列から値を逆シリアル化したい場合は、最初のバイトをピークし、それがどのインデックスであるかを確認し、それに基づいて使用するコンストラクター (および次に何をピークするか) を選択します。