データのメモリ レイアウトは、ボックス化されていないベクトルの型クラス インスタンスによって定義されます。
実装では、型ファミリに基づいた @Data.Vector.Unboxed@ を使用し、すべての要素型に対して効率的で特殊な表現を選択します。特に、ペアのボックス化されていないベクトルは、ボックス化されていないベクトルのペアとして表されます。
ベクトルのレイアウト仕様を確認するには、ベクトル パッケージで定義されているボックス化されていないベクトルのインスタンスを確認します。たとえば、Bool はバイトで表されます。
newtype instance MVector s Bool = MV_Bool (P.MVector s Word8)
一方、プリミティブ配列パッケージにウサギの穴を掘り下げると、プリミティブ型の配置とサイズの制約が表示されます。Repa 1 によると、マニフェスト (割り当てられた) 配列は行メジャーで埋められます。最新バージョンのドキュメントもこれをサポートしています。
データに対してFFIも行う必要があるため、レイアウトをまっすぐにします
C コード (またはその他のもの) と相互運用する必要があるため、Storableインスタンスを使用することが不可欠です。これらにより、型を C に簡単に転送できることが保証されます ( Repa への ForeignPtr インターフェイスを介して C レイアウト規則を使用することで、Repaとの間で C 形式の外部データへのポインターを安全にマップできます。