我一直在对Data Parallel Haskell进行大量研究,发现了两种单独的并行数组类型.这种[::]
类型似乎在研究论文中显得更多,似乎是理想的类型,但PArray
似乎无处不在.关于该主题的Wiki页面清楚地表明,[::]
无法将类型数组传递给非开发代码.为什么?为什么有这种中间PArray
类型?这对我来说似乎完全是多余的.维基称之为"平面阵列",但矢量化的重点是使平行阵列平坦.
更新:阅读更多论文和文档和源代码后,我更加困惑.[::]
或者它的同义词PArr
似乎在GHC.PArr中作为一个平面数组实现,而PArray
在多个地方称为"flat"的中间类型是在Data.Array.Parallel.PArray.Base和从那里导入的其他模块中实现的.数据系列,使用我读过的许多论文中描述的展平变换.为什么扁平阵列不扁平而嵌套扁平?
更新2:经过更多的研究,我发现教学是一个完整的混乱.维基页面在近一年内没有任何内容更新,与hackage文档相矛盾(参见Data.Array.Parallel.Prelude,它明确表示不会导入特殊的前奏),并且通常过时.该GHC Trac的页面也已经过时了,包括,例如,引导到提到包DPH包,至少就Hackage而言(我没有,而且不太不到哪里寻找中其他地方),不存在,并没有提到像dph-lifted-vseg这样的软件包.
更好的说明,我相信我现在理解第一次更新的答案,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 …
Run Code Online (Sandbox Code Playgroud) 我可以在GHCi中看到中缀运算符的类型:t如下:
>:t (.)
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)
如何在GHCi中看到运算符优先级?那可能吗?
另外,奖金问题,有没有办法通过ghci查看这些前奏函数的来源?