Îõ³h*,D+/      !"#$%&'()*+,-.4.2.4.0  Safe-Inferred =ÂÃÄËÚÛÝD/ repa-evalGeneric version of touch0 repa-evalGeneric version of zero1 repa-evalGeneric version of gone repa-evalÄElement types that can be used with the blockwise filling functions.(This class is mainly used to define the   method. This is used internally in the imeplementation of Repa to prevent let-binding from being floated inappropriately by the GHC simplifier. Doing a 2ë sometimes isn't enough, because the GHC simplifier can erase these, and still move around the bindings. repa-eval&Run an action on the gang in parallel.  repa-evalSame as  but in the ? monad.   Safe-Inferred =ÂÃÄËÚÛÝY" repa-evalFill something in parallel.ÕThe array is split into linear chunks, and each thread linearly fills one chunk.# repa-evalÇFill something in parallel, using a separate IO action for each thread.ÕThe array is split into linear chunks, and each thread linearly fills one chunk." repa-evalGang to run the operation on. repa-eval,Update function to write into result buffer. repa-eval+Function to get the value at a given index. repa-evalNumber of elements.# repa-evalGang to run the operation on. repa-eval,Update function to write into result buffer. repa-eval‘Create a function to get the value at a given index. The first argument is the thread number, so you can do some per-thread initialisation. repa-evalNumber of elements."# Safe-Inferred =ÂÃÄËÚÛÝ$ repa-eval6Fill something in parallel, using a round-robin order.8Threads handle elements in row major, round-robin order.6Using this method helps even out unbalanced workloads.$ repa-evalGang to run the operation on. repa-eval,Update function to write into result buffer. repa-eval+Function to get the value at a given index. repa-evalNumber of elements.$ Safe-Inferred =ÂÃÄËÚÛÝy% repa-evalFill something sequentially.4The array is filled linearly from start to finish. & repa-eval-Fill a block in a rank-2 array, sequentially.ÙBlockwise filling can be more cache-efficient than linear filling for rank-2 arrays.:The block is filled in row major order from top to bottom.% repa-eval,Update function to write into result buffer. repa-eval+Function to get the value at a given index. repa-evalNumber of elements to fill.& repa-eval,Update function to write into result buffer. repa-eval-Function to get the value at an (x, y) index. repa-evalWidth of the whole array. repa-eval&x0 lower left corner of block to fill. repa-evaly0 repa-evalw0 width of block to fill repa-evalh0 height of block to fill%&  Safe-Inferred =ÂÃÄËÚÛÝ' repa-eval-Fill a block in a rank-2 array, sequentially.ÙBlockwise filling can be more cache-efficient than linear filling for rank-2 arrays.òUsing cursor functions can help to expose inter-element indexing computations to the GHC and LLVM optimisers.7Coordinates given are of the filled edges of the block.:The block is filled in row major order from top to bottom. We need the # constraint so that we can use its „ function to provide an order of evaluation ammenable to the LLVM optimiser. You should compile your Haskell program with -fllvm -optlo-O3; to enable LLVM's Global Value Numbering optimisation.'  repa-eval,Update function to write into result buffer. repa-eval;Make a cursor to a particular element from an (x, y) index. repa-eval%Shift the cursor by an (x, y) offset. repa-eval3Function to evaluate an element at the given index. repa-evalWidth of the whole array. repa-eval&x0 lower left corner of block to fill. repa-evaly0 repa-evalw0 width of block to fill repa-evalh0 height of block to fill'  Safe-Inferred =ÂÃÄËÚÛÝ!y( repa-eval+Fill a block in a rank-2 array in parallel.ÙBlockwise filling can be more cache-efficient than linear filling for rank-2 arrays.7Coordinates given are of the filled edges of the block.ÅWe divide the block into columns, and give one column to each thread.?@ABCDEFGHIJKGLMÎ(repa-eval-4.2.4.0-2hgO7A0Ajgp688kaUBy1fmData.Repa.Eval.EltData.Repa.Eval.GangData.Repa.Eval.Generic.ParData.Repa.Eval.Generic.Seq repa-eval"Data.Repa.Eval.Generic.Par.Chunked&Data.Repa.Eval.Generic.Par.Interleaved"Data.Repa.Eval.Generic.Seq.Chunked#Data.Repa.Eval.Generic.Seq.Cursored#Data.Repa.Eval.Generic.Par.Cursored$Data.Repa.Eval.Generic.Seq.Reduction$Data.Repa.Eval.Generic.Par.ReductionElttouchzeroone$fGEltM1 $fGElt:+: $fGElt:*:$fGEltU1 $fElt(,,,,,) $fElt(,,,,) $fElt(,,,) $fElt(,,)$fElt(,) $fEltWord64 $fEltWord32 $fEltWord16 $fEltWord8 $fEltWord $fEltInt64 $fEltInt32 $fEltInt16 $fEltInt8$fEltInt $fEltDouble $fEltFloat $fEltChar $fEltBool$fGEltK1GanggangSizeforkGanggangIOgangST $fShowGang fillChunked fillChunkedIOfillInterleaved fillLinear fillBlock2fillCursoredBlock2foldAll foldInner foldRangegtouchgzerogoneghc-primGHC.Primseq _gangThreads_gangRequestVars_gangResultVars _gangBusyReqReqDo ReqShutdown gangWorkerfinaliseWorkerbaseGHC.IO.StdHandlesstderrseqIOparIOGHC.STST