I am somewhat of a beginner with DPH and wanted to ask a few (maybe elementary) questions. <br>
<br>
There appear to be two main libraries - regular and unlifted.&nbsp; I was a
little unclear on the difference between the two and was hoping to get
some clarification.&nbsp; If you use the &#39;regular&#39; api, it seems that you
can use the sort of &#39;syntactic sugar&#39; language extensions (e.g. [: blah
blah :]), but you are restricted to the somewhat limited Prelude
explicitly written for use with code that is to be vectorised.&nbsp; <br>
<br>
If you use the &#39;unlifted&#39; libraries, are you able to use functions/types from the standard Prelude?&nbsp; <br>
<br>
My problem is that I want to write a recursively-subdividing radix sort
(for integer keys), where on each iteration I partition my keys into
separate sets based on whether a certain bit is set or not.&nbsp; So I start
with the most significant digit bit (say 31), and then work down to the
least significant digit.&nbsp; I can write this in DPH just fine, but I&#39;m
getting &#39;panic&#39; errors when I attempt to compile, and I wonder if it
has something to do with the fact that I&#39;m using the standard Data.Bits
to inspect bits of each key.&nbsp; <br>
<br>
{-# LANGUAGE PArr, ParallelListComp #-}<br>
{-# OPTIONS -fvectorise #-}<br>
module RankPar(radix_sort) where<br>
<br>
import qualified Prelude <br>
import Data.Array.Parallel.PArray (fromList)<br>
import Data.Array.Parallel.Prelude ((+:+), fromPArrayP, not)<br>
import <a href="http://Data.Array.Parallel.Prelude.Int">Data.Array.Parallel.Prelude.Int</a> <br>
import Data.Bits<br>
<br>
{-# NOINLINE radix_sort #-} <br>
radix_sort :: Int -&gt; [:Int:] -&gt; [:Int:] <br>
radix_sort (-1) keys = keys<br>
radix_sort bit [:k:] = [:k:] <br>
radix_sort bit [: :] = [: :]<br>
radix_sort bit keys = (radix_sort (bit - 1) left) +:+ (radix_sort (bit - 1) right) <br>
&nbsp;&nbsp;&nbsp; where <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; right = [: x | x &lt;- keys, (testBit x bit) :] <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; left =&nbsp; [: y | y &lt;- keys, (not (testBit y bit)) :] <br>
<br>
Syntactically, this looks correct to me, but won&#39;t compile.&nbsp; Any ideas? <br>
<br>
Thanks all! <br>
-James