Подтвердить что ты не робот

В чем разница между PArray и [::] в Data Parallel Haskell?

Я проводил много исследований в Data Parallel Haskell и нашел два отдельных типа параллельных массивов. Тип [::], похоже, больше проявляется в исследовательских работах и, по-видимому, является идеальным типом, но PArray, кажется, застрял повсюду. Страница вики на эту тему очень четко показывает, что массивы типа [::] не могут быть переданы в невостребованный код. Зачем? Почему существует этот промежуточный тип PArray? Мне кажется совершенно лишним. Вики называет его "плоским массивом", но вся точка векторизации заключается в том, чтобы сделать параллельные массивы плоскими.

Обновление: после чтения большего количества документов и документации и исходного кода я еще более запутан. [::] или его синоним PArr, по-видимому, реализованы в GHC.PArr как плоский массив, а PArray - промежуточный тип, который называется "плоской" в нескольких местах, реализован в Data.Array.Parallel.PArray.Base и других модулях, импортированных оттуда в качестве семейства данных, используя преобразование сплющивания, описанное во многих документах, которые я читал. Почему плоские массивы не плоские, а вложенные плоские?

Обновление 2: после дополнительных исследований я обнаружил, что подкрепление является полным беспорядком. Страница wiki не обновляла контент за почти год, противоречит документации по hackage (см. Data.Array.Parallel.Prelude, где он явно говорит не импортировать специальную прелюдию), и просто устарел. Страница GHC.PArr:

-- BIG UGLY HACK: The desugarer special cases this module.  Despite the uses of '-XParallelArrays',
--                the desugarer does not load 'Data.Array.Parallel' into its global state. (Hence,
--                the present module may not use any other piece of '-XParallelArray' syntax.)
--
--                This will be cleaned up when we change the internal represention of '[::]' to not
--                rely on a wired-in type constructor.

Я полагаю, что, когда включена векторизация, этот модуль автоматически заменяется другим представлением, которое использует преобразование сглаживания. Это может даже быть чем-то вроде

type [::] = PArray

решая мою оригинальную проблему. Однако не только последнее имеет смысл (почему ограничение [::] на тип плоского массива при отключении векторизации?), Но я не нашел доказательств, подтверждающих любую теорию, кроме упомянутого выше комментария. Кажется, что единственный надежный способ узнать что-либо - это посмотреть на источник GHC, который, учитывая его размер и сложность, - это то, что я очень хочу сделать, даже если бы я был уверен, что добьюсь успеха.

4b9b3361