次の形式のデータ型があります。
data T = { a :: Int, b :: ComplexOtherDataType }
Data.Vector
明らかに、これらをモジュールから通常のベクトルに入れることができます。しかし、私はa
コンポーネントにアクセスするときに非常に優れたパフォーマンスが必要なので、余分な間接化は望ましくありません。私がやりたいのはT
、のインスタンスを作成することですData.Vector.Unboxed.Unbox
が、それでもb
怠惰です。
のvector-th-unbox
インスタンスを作成するための素敵なテンプレート Haskell インターフェイスを提供しますがUnbox
、私の場合は機能しません。T
のインスタンスを作成するには、とUnbox
の両方がインスタンスである必要があります。しかし、私は開梱したくありません。ボックス化/怠惰にしたい。a
b
b
私の直感によると、この障害を克服する最も簡単な方法は、型を提供することです
newtype LazyUnbox a = LazyUnbox a
次に、基本的にボックス化されていないベクター内にポインターを格納するだけのUnbox
インスタンスを提供する必要があります。LazyUnbox
これどうやってするの?それとも、完全に良いアプローチがありますか?