Недавно я начал использовать библиотеку Haskell Repa, которая сильно зависит от type семейства и связанные типы. Я могу определить массив 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 в этом примере), но оставить форму без изменений. Возможно ли что-то подобное?