最近、私はHaskellのRepaライブラリを使い始めました。これは、型族と関連する型に大きく依存しています。次のようにRepa配列を定義できます。
ghci> let x = fromListUnboxed (Z :. (5 :: Int) :. (2 :: Int)) [1..10]
次のように操作します。
ghci> computeP $ R.map id x :: IO (Array U DIM2 Double)
AUnboxed ((Z :. 5) :. 2) (fromList [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0])
ここで、Uは、結果がボックス化されていない配列として表されるようにする関連データ型です。DIM2は配列次元です。推測できたとしても、具体的な寸法を指定しなければならないのは好きではありません。代わりに、次のようなものを書きたいと思います。
ghci> computeP $ R.map id x :: Shape sh => IO (Array U sh Double)
これは有効ではありませんが、適切な関連データ型(この例ではU)を渡すことで配列型を指定できるようにすることを目的としていますが、形状は変更しません。そのようなことは可能ですか?