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