HOOGO$-.0:=>a  $$'(*+bc &&d e  &)+f &&g ((*,h##i !%((**,,k((l !#%%m n "#((,,o &&p $%'(q %))r  $(*+s  ,t !#%%*+u,,wy++z|ńK$ y()->AllAnyjArithException]ArrayUArrayExceptionHAsyncException;Bool BufferMode BufferStateCCharCClockfCDev4CDoubleCFloatCIno:CIntCIntMaxCIntPtrbCLDouble CLLongCLongyCMode1COffCPidCPtrdiffYCSCharCShort CSigAtomicCSize9CSsizeCTimeCUCharwCUInt/CUIntMaxCUIntPtrCULLongWCULongCUShortCWcharChantCharComplex ConsoleEventConstr ConstrRepDataRepDataTypeDigitDouble2Dynamic#E12E6ElemErrno ExceptionExitCodeFDTypeFd| FingerTree^FixityUFloatGeneralCategoryHandle HandlePosn HandleTypeHashDataIOu IOErrorTypel IOExceptioncIOModeIId4Identity'Inserts#IntInt16>Int32Int64rInt8 IntMapIntPtrIntSetzInteger3Lexeme%MapMaybe Node Ordering Pn QSemd QSemNZ ReadPA ReadPrec( STM STUArray SeekMode Seq Set StableName TVar ThreadIdm Timeout` Tree& TyCon TypeRep UArray Unique Version ViewL ViewR Weak Word+ Word16 Word32_ Word64 Word8 WordPtrK ZipList6 [::]' [] TraversableFoldableMonadFix Applicative Alternative MonadPlusFunctorMonadFunctorMonadFunctor Applicative ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqNFData PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArrayNFData PrintfArgStorableDataEqOrdNumEnumIntegralBitsShowRealBoundedIxReadIArrayMArrayNFData PrintfArgStorableDataNumEnumIntegralBitsShowRealBoundedIxReadOrdEqIArrayMArrayNFData PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray Typeable1 Typeable1FunctorFoldable Traversable Typeable1FunctorFoldable TraversableEqOrdShowReadTypeableOrdEq Typeable2IArrayDataData Typeable1Functor ApplicativeMonad TraversableFoldableEqTypeableDataShowEqOrdTypeable Typeable1 Typeable1Foldable Typeable1FunctorFoldable TraversableMonad MonadPlus Typeable1ShowReadEnumIxOrdEq Typeable3 Typeable1FunctorMonadFunctorMonad MonadPlusFunctorMonad MonadPlusTypeableTypeableMonad MonadPlus MonoidDataReadShowBoundedEnumIxOrdEqFoldableFunctor Traversable TraversableFoldableMonadFix Applicative AlternativeFunctorMonad MonadPlus Typeable2ShowEqRead NFData PrintfArgBitsDataReadEqOrdNumEnumShowIxRealIntegralNFDataMonoidDataEqOrdShowReadTypeable ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqFoldableFunctor Typeable1NFData PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArrayNFData PrintfArgStorableDataEqOrdShowNumEnumIntegralReadBitsRealBoundedIxIArrayMArrayNFData PrintfArgStorableDataShowNumEnumIntegralReadBitsRealBoundedIxOrdEqIArrayMArrayNFData PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArrayNFDataNFDataIntegral NFDataOrd PrintfArgBitsStorableDataReadShowNumBoundedEnumIxRealIntegralEqOrdIArrayMArrayEqMonadMonadFunctor ApplicativeShowReadEnumIxOrdEqEqShowEqShowMonadFix ApplicativeFunctorMonadShowEqShowEqShowDataEqShowIxBoundedShowReadEnumOrdEqNFData PrintfArgStorableDataEqOrdNumReal FractionalRealFracFloating RealFloatShowEnumReadIArrayMArrayShowEqFoldableFunctor Traversable ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqEqShowReadOrdEqShowEqEqFunctorFoldable Traversable HasResolution HasResolutionTypeableShowNFData PrintfArgStorableDataEqOrdNumReal FractionalFloatingRealFrac RealFloatShowEnumReadIArrayMArrayFoldableFunctor TraversableTypeableDataShowShowEqShowEqShowEqReadShowEnumOrdEqTypeable Typeable1NFData PrintfArgIsCharStorableDataReadShowBoundedEnumIxEqOrdIArrayMArray Typeable1 ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeable RealFloatRealFracFloating FractionalRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq ReadShowTypeable RealFloatRealFracFloating FractionalRealStorableEnumNumOrdEq ReadShowTypeable RealFloatRealFracFloating FractionalRealStorableEnumNumOrdEq ReadShowTypeableRealStorableEnumNumOrdEq ReadShowTypeableRealStorableEnumNumOrdEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqEqShowReadOrdEq NFDataStorableDataReadShowBoundedEnumIxOrdEqIArrayMArrayShowOrdEqShowOrdEqIArrayShowOrdEqMonoidBoundedShowReadOrdEqMonoidBoundedShowReadOrdEqArrow ArrowChoice ArrowApply ArrowLoop NFDataMonoidDataReadShowBoundedEnumIxEqOrd @Bounds$ ByteCount$CDir$CDirent$CFLock$CGroup$CLconv$CPasswd$ CSigaction$CSigset$CStat$CStringp$ CStringLenU$CTermiosP$CTmK$CTmsF$CUtimbufA$CUtsname<$CWString,$ CWStringLen$ ClockTick$ConIndex$DeviceID# DiffArray# DiffUArray#Done#Edge# EpochTime#FD#FileID#FileMode# FileOffset#FilePathz#FinalizerEnvPtrG# FinalizerPtr$#Forest#Generic#GenericB"GenericM"GenericQ"GenericR"GenericT"Graph"HandlePosition"IOError"IPr"Key"Limit{" ListUArrayP"MicroB"Pico3"Prec-"ProcessGroupID&" ProcessID"Rational " RawBuffer!ReadS!STRep! SampleVaro!ShowST!StrategyH!String;!Table'!Vertex!!IntaArrayInta[]Charaa()[]Char[]CharaMVar(,)IntMVarasaState#s(#,#)State#saa[]Char[](,)a[]CharMutableByteArray# RealWorldRatioIntegerCPidCPidIntFixedE12FixedE6e(,)ii[]eUArrayieCLongInt(,)IntInt IOExceptionIntegerArrayInt[]Intaammararmamaacacaa[]TreeaaFunPtrPtraIO()envaFunPtrPtrenvPtraIO()[]CharCOffCModeCInoCIntCTime(,)IntInt() IOToDiffArrayIOUArray IOToDiffArrayIOArrayCDevIntCClock(,)PtrCWcharIntPtrCWchar()()()()()(,)PtrCCharIntPtrCChar()()()()()()()()()CSize(,)IntInt(8:[aUybucidde1af[gHYhViNjNkMNlGKmHnADo@p<q<rp6s/t],u`)v(w%zO%iV%p]%ld%ik%sr%ty%ZipList#(1(3(6m(8[(e+(oY'r%ag&i%t%e%b3&h&m%o%d%e%IOModea&n&d&l&e#& HandleTypeu:&fA&fH&eO&rV& BufferStatepn&a+'m&p&e&d&a&m&o&n&a&d& WrappedMonadr&r&o&w& WrappedArrowo'n 'a'd' WrappedMonadr2'r9'o@'wG' WrappedArrowr`'dg'Word#(1(3'6'8'p't'r'WordPtrWord84'Word64#'Word64#2'Word326 (Word16Word#a2(k9(Weak#L(Weak##b(Word84t(#{(Word642(#(Word326(#(Word16Worde )i(e(w(l(r(ViewRViewLr)s:)t)e#)x*)VertexiA)oH)nO)Versiona1,n(*p)sv)e})r)e)r)r)o)r) IOErrorTypep)e)r)c)a)s)e)l)e)t)t*e *r*GeneralCategoryd+iU+s9*a*uE*pL*pS*oZ*ra*th*eo*dv*o}*p*e*r*a*t*i*o*n* IOErrorTypet*i*s*f*i*e*d*c*o+n +s+t+r!+a(+i/+n6+t=+sD+ IOErrorTypeqo+ta+Unituv+e}+Uniquee+f+r+f+l+o+w+ArithExceptioni+n+e+d+e+l+e,m,e,n,t,ArrayExceptionr8,r?,aF,yM,UArraya/h/iG.r-v-y},c-p,e,a,r,e,p,TypeRepb,l,e,Typeable1w-2d-3Q-4>-5+-6-7- Typeable7 Typeable6 Typeable5 Typeable4 Typeable3 Typeable2 Typeable1o-n-TyCona-r-TVara-e-u-e-Boole-Treev.e.r.s.a.b$.l+.e2. Traversablem.tS.lZ.ea.ch.ao.sv.e}.l.e.t.t.e.r.GeneralCategorye.e.x.p.i.r.e.d. IOErrorTyper /e/a/d!/id/k-/i4/l;/lB/eI/dP/AsyncExceptiondk/ThreadId#/ ThreadId#b/l/e/Table #c6a6c 6e4h4ip4p3t0uc0y/mB0s/t0e0m0e0r0r#0o*0r10 IOErrorTypebI0oP0lW0Lexemem0ro0rv0o}0g0a0t0e0GeneralCategorySumSTa2m2o2r1u0a0r0r0a0y1STUArraya1e1i&1n-1g41Stringci1rN1eU1p\1DataRepop1nw1s~1t1r1 ConstrRepa1f1p1t1STretSTRepSTRefm1FDTypet1e1g2y 2Strategyr&2a-2b42l;2eB2StorableaY2r`2rg2an2yu2 StorableArraySTMbF3c2r2t2e2#2State#r2a2y2STArrayk2o3v3e3r3f3l$3o+3w23AsyncExceptionlM3eT3n3p`3tg3rn3 StablePtr#3 StablePtr#a3m3e3 StableNamea3c3e[4i3n3g3c3o3m4b4i4n4i4n#4g*4m14a84r?4kF4GeneralCategoryGeneralCategoryzw4e~4d4Sizedo4u4t4d4o4w4n4 ConsoleEventw4Shows4ShowSe5m.5q!5t5SetSeqi55c<5lC5oJ5sQ5eX5d_5hf5am5nt5d{5l5e5 HandleTypek5f5m5o5d5e5SeekModer5o5m5e5n5d5SeekModec6SCCm&6p-6l46e;6vB6aI6rP6 SampleVarIntegera;e6i6g6h6t6Eithera9c8g8ln8q8s7t6u6r6n6i6n6o6r6d6e7r 7ArgOrdero"7u)7r07c77e>7b7e7vO7aV7n]7id7sk7hr7ey7d7 IOErrorTypex7h7a7u7s7t7e7d7 IOErrorTypeu7s7y7 IOErrorTypeaR8u 8i8r8e!8o(8r/8d68e=8rD8ArgOrderrY8g`8ArgDescrau8t|8i8v8e8s8e8e8k8SeekModeu8l8a8r8f8i8l8e8FDTypec9sP9u9p9d9e%9r,9r39o:9rA9 ExceptioneW9l^9ee9rl9rs9oz9r9 Exceptiono9n9e9r9r9o9r9 Exceptiondw:l9Realf#:w9o9r:l :d: RealWorldlO:r/:a6:c=:RealFracoV:a]:td: RealFloatReadb;h;mb;p.;s;w:r:i:t:e:h:m:o:d:e:IOModea:n:d;l;e; HandleTypeReadSReadPrB;eI;cP;ReadPrecoi;dp;ew;IOModea;n;d;l;e; HandleTypeu;f;f;e;r; BufferStatetg<w;b1<d<e <v<i<c<e%<FDTypeu8<f?<fF<eM<rT< RawBufferLexemeix<o<Ration<a<l<Rationals<e<m<QSemn<QSemNa@em?iQ?o5?r==t)=u=n=c=Lexemer0=Ptre?iR>oN=c=d=t_=of=cm=ot=l{=e=r=r=o=r= IOErrorTypeu=c=t=Producte=s=s=g>i=d= ProcessIDr>o>u%>p,>i3>d:>ProcessGroupIDn>v^>ae>tl>es>uz>s>e>GeneralCategoryt>f>a>t>y>p>e> PrintfTyper>g> PrintfArgc'?f ?i?x?FixityPreco@cE@hL@fS@aZ@ia@lh@ Exceptiona~@g@r@a@p@h@s@e@p@a@r@a@t@o@r@GeneralCategoryOpaquebDpBrBtXAvAe!Ar(Af/Al6Ao=AwDAArithExceptionh_AefArmAeBlSBnBpAsAyAmAbAoAlAGeneralCategoryuAnAcAtAuAaAtAiAoAnBGeneralCategoryu"Bm)Bb0Be7Br>BGeneralCategoryeZBtaBthBeoBrvBGeneralCategoryrBrBoBrB IOErrorTypedBOrdeBrBiBnBgBOrderingaCeCtCakCd=Ci!Co(Cn/COptDescreDCsKCcRCrYCOptDescrrrCgyCArgDescrnCpCuCnCcCtCuCaCtCiCoCnCGeneralCategoryqCuCeDOpaquejDe#Dc*Dt1DObjecteGfFokDuWDm^DNumaFbFd|Fm'FnkErPEsEtDaDhDiDnDgDMaybesDsDiDgDnDeDdDGeneralCategoryuEcEhEt#Eh*Ei1En8Eg?E IOErrorTypeeWEp^EDataRepsEtwEe~ErEmEiEnEaEtEiEoEnE ExceptionpEaEcEiEnEgEmEaFr FkFGeneralCategorye.Ft5FhHMVar#tTHaHv`HagHrnH#uHMutVar#bHlHeHaIbHyHtHeHaHrHrHaHyH#HMutableByteArray#rIrIaIyI#$I MutableArray#dInGIaqIoSIiZIdaIMonoiddxIMonadfIpIlIuIsI MonadPlusiIxIMonadFixiIfIiIeIrIl@JsJyJmJbJo$Jl+JGeneralCategoryeGJtNJtUJe\JrcJGeneralCategorycJrJoJMicrop:KrKtJyJbJeJMaybehJsJyJmJbJoJlKGeneralCategoryrKa#Ky*KMArrayMapa1NeMiyLopKtbKOrderinggRLsKwKeKrKcKaKsKeKlKeKtKtKeKrKGeneralCategorysKoKfKpLr LeLcLi"Ls)Li0Lo7Ln>LArithExceptionoYLf`LfgL ConsoleEventmwMnLsLtLuLaLrLrLaLyL ListUArrayeLb/MsLeLpLaLrLaMt MoMrMGeneralCategoryu6Mf=MfDMeKMrRMiYMn`MggM BufferModei~MtMLimitfNtMxMeMmMeMLexemetMeMrMnMuMmMbMeNr NGeneralCategoryt%NEithers8Nt?NLasteNlYNe`NigNsnNluNi|NKleisliyNKey#NuNsNtNMaybeInteger#V1yV3`V6GV86Va VdUgUlMUnsQoOpOs'OxOIxchOs3Ot:OrAOiHOnOOgVOIsStringhoOavOr}OIsCharrOIPrIOaFQePmzPr]PtPuOaOrOrOaOyOIOUArrayoPdPiPfPf#Pa*Pr1Pr8Pa?PyFP IOToDiffArrayedPfkPIORefoPdPePIOModerPxPcPePpPtPiPoPnP IOExceptionrPoPrQIOErrortQy#Qp*Qe1Q IOErrorTyperMQrTQa[QybQIOArrayaTdkTfQTiSlSrStRvQaQlQiQdQaQrQgQuQmQeQnQtQ IOErrorTypeInt #S1S3S6S8xScFSeRmRpRrdRsFReMRtTRIntSetekRprRDataReptRrRIntPtraRpRIntMapgSrRrRuRpRtReRdR IOErrorTypee.SrSaSlSIntegralr5SIntegeroMSnTSs[StbSriS ConstrRepInt84SInt64#SInt64#2SInt326SInt16Int#:+::+:tTi TaTlTq Tu'To.Tt5TeetEeiLeoSenZe Exceptionmpeiwec~eDynamicaepeleeexeheaenedeleeeHandleleDualnBfufbflfefDouble#1fDouble#eIfDoneffrfvhfiofdvfe}fbfyfzfefrfofArithExceptionefcftfofrfyfFDTypeffa;guga grgrga gy'g DiffUArrayrBgrIgaPgyWg DiffArrayauhchfgngvgigcgegigdgDeviceIDogrgmgaglgArithExceptionaguglht hHandleri!hm(ha/hl6hn=huDhmKhbRheYhr`hGeneralCategoryd|hlhohchkh Exceptions!ithahDataDatarithyhphehDataTypee ipiDataReph(ip/iu6in=icDitKiuRiaYit`iigioninuiGeneralCategoryDouble#uaucdudtfLtg thsifsj2slqmdqojopns0mtlujw,jyiciljijcjsjcjc#jSCCcjs8jt?jrFjiMjnTjg[jCWStringlrjeyjnj CWStringLenhjajrjCWcharcli!llkroksBktjiksjnjajmjekCUtsnamemkb"ku)kf0kCUtimbufhIkoPkrWkt^kCUShortrvke}knkckykskykmkbkoklkGeneralCategorylkoknkgkCULongoln lglCULLongn(lt/lCUIntmhlpHltOlrVlCUIntPtraolxvlCUIntMaxhlalrlCUCharelilmlCTmslCTmsmlelCTimermm mimomsmCTermioscnhnimsmtKmamrWmi^mnemglmCStringlmemnm CStringLentmCStatimzmemCSsizegnzmemCSizea,ns nentnCSigsetchnt8no?nmFniMncTn CSigAtomictonivno}nnn CSigactiononrntnCShorthnanrnCSChara=oi(otnrndoiofofoCPtrdiffd/oCPidsDosKowRodYoCPasswdfOqm"qn{oipnopsotoroooloGeneralCategoryco ConsoleEvento(ptoConstroConstrrpeppp ConstrRepl/pe6pe=pvDpeKpnRptYp ConsoleEventevpc}ptpoprpppupnpcptpupaptpipopnpGeneralCategorynpdqe qxqConIndexp)ql0qe7qx>qComplexfVqCOffokqdrqeyqCModec sdrlroqc}rngrsqeq ConsoleEventd-rpquqnqcqtquqaqtri rornrGeneralCategoryh4ra;rnBrdIrlPreWr HandleTypegnrCLongkrtrircrkr ClockTickornrgrCLLongorurbrlrerCLDoubleosnsv"sCLconvm9sp@sbGsuNsfUsCJmpBufnmsostysCIntmspstsrsCIntPtrasxsCIntMaxCInoasntrsChar#tChar#Chanr'to.tu5tpuCDirentvVuCDevhulpuowuc~ukuCClockauruCChartucuhuHandlerChari9ylxowrwu~vyutve vaGvcvovu&vn-vt4v ByteCountrNvrUva\vycv#jv ByteArray#fvfvevrvBufferlwmvsvtvavtvev BufferStateovdvev BufferModeiws!wt(w BufferListcdwnFwiMwlTw BufferListokwnrwsyw BufferListewawkw ConsoleEventowuwnwdwewswBoundsdwBoundedlxBooloxc!xk(xbxe4xd;xixoGxnNxdUxe\xacxdjxmqxvxxaxrx Exceptionnxdxexfxixnxixtxexlxyx Exceptionuxfxfye yryiyn"yg)y BufferModet@ysGyBitsb|c;dl}n}p}rnzsysyyynycyeyxycyeypytyiyoynyAsyncExceptionezoyczAssocrzt zi'zo.zn5zf~eE~ Alternativeea~ah~do~yv~e}~x~i~s~t~s~ IOErrorTypeAllc~r~e~p~DataRepo~n~s~tr ConstrRepdr%#,Addr#yBcIlPiWc^seclcsSCCsoluteseekSeekMode:][]:][::]*$+::+::+:*:)?()O߁ǁQـ()b ()cba(,,)()abArray()ba(,)()a[]()b[]()a b  cbaAssoc a[]b[]c[]puucba()a  ()b()cbacbb[]a()b[]()Inta  b   a[]b[]ba(,)[]cO;#چƆpX9хq]E1Strategy StrategyStrategyStrategyStrategy'Strategy&Strategy#Strategy"IxbStrategyStrategyIntegralbStrategy$IntegralaStrategy)+Strategy-Strategy(NFDataa NFDataa*Done NFDataaStrategy!Strategy%StrategyStrategyStrategy DoneNFDataaStrategy,zhXF6$܋lTBŠhH0؉ĉtZ>ΈjN8usingBusing-strategy[Strategy, strategiesy StrategiessseqsSeq+sparkingsparking*sparÈsPar)sforceوsforce( seqtriple seqTriple'seqpairseqPair& seqlistnth- seqListNth%seqlistnKseqListN$seqlistfseqList#seqarrseqArr"rwhnfrwhnf!rnfrnf r0r0pseq͉pseq parzipwith parZipWith partriple parTripleparpair"parPairparmap;parMap parlistnthW parListNthparlistnuparListN parlistchunk parListChunkparlistparList parflatmapъ parFlatMap parbuffer parBufferpararr parArrparallel%ParallelparallelparJparnfdata_NFDatafstpairfstlistfstPairFstListforceforcedoneDone demanding̋ demandingassocAssoc>||>|| >| >| :=:= .||,.|| .|=.| -||N-||-|_-|$||p$||$|$|-ƻ?$tunzG\*1ܢku֝ڛĚR|ƕΔ.ӏFusingusing :: a ->  Strategy a -> aaStrategyaahTakes a value and a strategy, and applies the strategy to the value before returning the value. Used to express data-oriented parallelism. x `using` s is a projection on x, i.e. both:
  • a retraction x `using` s x
  • idempotent (x `using` s) `using` s = x `using` s
Strategytype Strategy a = a -> DoneYvA strategy takes a value and returns a Done value to indicate that the specifed evaluation has been performed. sSeqsSeq :: a ->  Strategy b(aStrategybA strategy corresponding to seq: x `seq` e = e `using` sSeq x. sSeq has been superceded by demanding. Replace e `using` sSeq x with e `demanding` rwhnf x. sparkingsparking :: a -> Done -> a_PaDoneaEvaluates the second argument in parallel with the first. Used to express control-oriented parallelism. The second argument is usually a strategy application. sParsPar :: a ->  Strategy bWBaStrategybA strategy corresponding to par: x `par` e = e `using` sPar x. sPar has been superceded by sparking. Replace e `using` sPar x with e `sparking` rwhnf x. sforcesforce ::  NFData a => a -> b -> bNFDataaabb seqTriple  seqTriple ::  Strategy a ->  Strategy b ->  Strategy c -> Strategy (a, b, c)s&StrategyaStrategybStrategycStrategy(,,)abcWApply three strategies to the elements of a triple in sequentially from left to right. seqPairseqPair ::  Strategy a ->  Strategy b -> Strategy (a, b)r8StrategyaStrategybStrategy(,)abPApply two strategies to the elements of a pair sequentially from left to right.  seqListNth seqListNth :: Int ->  Strategy b ->  Strategy [b]X,IntStrategybStrategy[]bApplies a strategy to the nth element of a list (if there is one) before returning the result. E.g. seqListNth 2 [e1, e2, e3] evaluates e3. seqListNseqListN :: Integral a => a ->  Strategy b ->  Strategy [b]qIntegralaaStrategybStrategy[]bCSequentially applies a strategy to the first n elements of a list. seqListseqList ::  Strategy a ->  Strategy [a]iBStrategyaStrategy[]a;Sequentially applies a strategy to each element of a list. seqArrseqArr :: Ix b =>  Strategy a -> Strategy (Array b a)=IxbStrategyaStrategyArrayba;Apply a strategy to all elements of an array sequentially. rwhnfrwhnf ::  Strategy aStrategya/Reduces its argument to weak head normal form. rnfrnf ::  NFData a =>  Strategy aN1NFDataaStrategyar0r0 ::  Strategy aStrategya/Performs no evaluation of its argument.  parZipWith  parZipWith ::  Strategy c ->  (a -> b -> c) -> [a] -> [b] -> [c]IStrategycabc[]a[]b[]cUZips together two lists using a function, and evaluates the result list in parallel.  parTriple  parTriple ::  Strategy a ->  Strategy b ->  Strategy c -> Strategy (a, b, c)aStrategyaStrategybStrategycStrategy(,,)abc@Apply three strategies to the elements of a triple in parallel. parPairparPair ::  Strategy a ->  Strategy b -> Strategy (a, b)\StrategyaStrategybStrategy(,)ab<Apply two strategies to the elements of a pair in parallel. parMap parMap ::  Strategy b -> (a -> b) -> [a] -> [b]k?Strategybab[]a[]bApplies a function to each element of a list and and evaluates the result list in parallel, using the given strategy for each element.  parListNth parListNth :: Int ->  Strategy a ->  Strategy [a]\IntStrategyaStrategy[]aEvaluates n elements of the spine of the argument list and applies the given strategy to the nth element (if there is one) in parallel with the result. E.g. parListNth 2 [e1, e2, e3] evaluates e3. parListNparListN :: Integral b => b ->  Strategy a ->  Strategy [a]IntegralbbStrategyaStrategy[]aKApplies a strategy to the first n elements of a list in parallel.  parListChunk parListChunk :: Int ->  Strategy a ->  Strategy [a]աIntStrategyaStrategy[]aSplits a list into chunks (sub-sequences) of length n, and applies a strategy sequentially to the elements in each chunk. The chunks are evaluated in parallel. This is useful for increasing the grain size. parListparList ::  Strategy a ->  Strategy [a]T-StrategyaStrategy[]a;Applies a strategy to every element of a list in parallel.  parFlatMap  parFlatMap ::  Strategy [b] ->  (a -> [b]) -> [a] -> [b]@Strategy[]ba[]b[]a[]bxUses parMap to apply a list-valued function to each element of a list in parallel, and concatenates the results.  parBuffer  parBuffer :: Int ->  Strategy a -> [a] -> [a]O&IntStrategya[]a[]aApplies a strategy to the nth element of list when the head is demanded. More precisely:
  • semantics: parBuffer n s = id :: [a] -> [a]
  • dynamic behaviour: evalutates the nth element of the list when the head is demanded.
The idea is to provide a `rolling buffer' of length n. parBuffer has been added for the revised version of the strategies paper and supersedes the older fringeList. parArrparArr :: Ix b =>  Strategy a -> Strategy (Array b a)mIxbStrategyaStrategyArrayba:Apply a strategy to all elements of an array in parallel. NFDataclass NFData afstPairFstListfstPairFstList ::  NFData a => Strategy [(a, b)]nNFDataaStrategy[](,)abforceforce ::  NFData a => a -> aNFDataaaaDonetype Done = ()- demanding demanding :: a -> Done -> aaDoneaEvaluates the second argument before the first. Used to express control-oriented parallelism. The second argument is usually a strategy application. Assocdata Assoc a bX>|| (>||) :: Done -> Done -> DoneªDoneDoneDone:Evaluates the first argument in parallel with the second. >| (>|) :: Done -> Done -> DonedODoneDoneDone0Evaluates the first argument before the second. := (:=) :: a -> b ->  Assoc a babAssocab.||(.||) :: (b -> c) ->  Strategy b -> (a -> b) -> a -> c{bcStrategybabacParallel function composition. The result of the second function is evaluated using the given strategy, in parallel with the application of the first function. .|(.|) :: (b -> c) ->  Strategy b -> (a -> b) -> a -> cbcStrategybabacSequential function composition. The result of the second function is evaluated using the given strategy, and then given to the first function. -||(-||) :: (a -> b) ->  Strategy b -> (b -> c) -> a -> cabStrategybbcacParallel inverse function composition, for those who read their programs from left to right. The result of the first function is evaluated using the given strategy, in parallel with the application of the second function. -|(-|) :: (a -> b) ->  Strategy b -> (b -> c) -> a -> ctabStrategybbcacSequential inverse function composition, for those who read their programs from left to right. The result of the first function is evaluated using the given strategy, and then given to the second function. $|| ($||) :: (a -> b) ->  Strategy a -> a -> bӱabStrategyaab~Parallel function application. The argument is evaluated using the given strategy, in parallel with the function application. $| ($|) :: (a -> b) ->  Strategy a -> a -> bزabStrategyaabxSequential function application. The argument is evaluated using the given strategy before it is given to the function. pseqpseq :: a -> b -> bijabbRSemantically identical to seq, but with a subtle operational difference: seq is strict in both its arguments, so the compiler may, for example, rearrange a seq b into b seq a seq b. This is normally no problem when using seq to express strictness, but it can be a problem when annotating code for parallelism, because we need more control over the order of evaluation; we may want to evaluate a before b, because we know that b has already been sparked in parallel with par. This is why we have pseq. In contrast to seq, pseq is only strict in its first argument (as far as the compiler is concerned), which restricts the transformations that the compiler can do, and ensures that the user can retain control of the evaluation order. parpar :: a -> b -> bh\abbIndicates that it may be beneficial to evaluate the first argument in parallel with the second. Returns the value of the second argument. a par b is exactly equivalent semantically to b. par is generally used when the value of a is likely to be required later, but not immediately. Also it is a good idea to ensure that a is not a trivial computation, otherwise the cost of spawning it in parallel overshadows the benefits obtained by running it in parallel. Note that actual parallelism is only supported by certain implementations (GHC with the -threaded option, and GPH, for now). On other implementations, par a b = b.  Strategiesmodule Control.Parallel. StrategiesgParallel strategy combinators. See http://www.macs.hw.ac.uk/~dsg/gph/papers/html/Strategies/strategies.html for more information. Original authors: Phil Trinder, Hans-Wolfgang Loidl, Kevin Hammond et al. parallelpackage paralleljXparallel programming library This package provides a library for parallel programming. Parallelmodule Control.ParallelParallel Constructs = ControlParallel StrategiesControlParallelWparallel1.0.0.1Fhttp://hackage.haskell.org/packages/archive/parallel/1.0.0.1/doc/html/Chttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/parallel