HOOGXzu$-.0:=>a  $$'(*+bc &&d e  &)+f &&g ((*,h##i !%((**,,k((l !#%%m n "#((,,o &&p $%'(q %))r  $(*+s  ,t !#%%*+u,,wy++z| s_pns()z->IAll(Any BlockReasonBoolCCharCClockYCDev'CDoubleCFloatuCIno-CIntCIntMaxCIntPtrUCLDoubleCLLongCLonglCMode$COffCPidCPtrdiffLCSCharCShort CSigAtomictCSize,CSsizeCTimeCUCharjCUInt"CUIntMaxCUIntPtrCULLongJCULongCUShortCWcharrChangChar/Complex$ ConsoleEventConstr ConstrRepDataRepDataTypeDigitDocDoubleDynamicjE12[E6LEitherAElem#Errno ExceptionFd FingerTreeFixityFloatfGeneralCategoryDHandle>HashData5IOIOUArrayIdInsertsIntInt16pInt32BInt64Int8 IntMap IntPtr IntSetT Integer5 Lexeme, Map! Maybe NestedAtomically NoMethodError Node NonTerminationi OrderingY PH PatternMatchFail/ QSem% QSemN ReadP ReadPrec RecConError RecSelError RecUpdError STM SeqM Set9 StableName. TVar# ThreadId ThreadStatus Timeout Tree TyCon TypeRep Unique Versionv ViewLN ViewR& Word Word16 Word32 Word64u Word8G WordPtrZipList[::][] TraversableFoldable Applicative AlternativeMonadFix MonadPlusFunctorMonadFunctor Applicative ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqNFDataIArrayMArray PrintfArgDataStorableNFDataIArrayMArray PrintfArgDataStorableNFDataIArrayMArray PrintfArgDataStorableNFDataIArrayMArray PrintfArgDataStorableIArrayMArray PrintfArgDataStorable Typeable1FunctorFoldable Traversable Typeable1FunctorFoldable TraversableEqOrdShowReadTypeableOrdEqDataData Typeable1Functor ApplicativeMonad TraversableFoldableTypeableShow ExceptionEqShowOrdEqShowEqOrdTypeableData Typeable1 Typeable1Foldable Typeable1FunctorFoldable TraversableMonad MonadPlus Typeable1 Typeable1FunctorMonadTypeableShow ExceptionTypeableShow ExceptionTypeableShow ExceptionFunctorMonad MonadPlusFunctorMonad MonadPlusTypeableTypeableTypeableShow ExceptionMonad MonadPlusMonoidDataIxTypeableShow ExceptionFoldableFunctor TraversableTypeableShow ExceptionTypeableShow Exception TraversableFoldable Applicative AlternativeMonadFix MonadPlusFunctorMonad Typeable2ShowEqNFData PrintfArgDataBitsIxNFDataMonoidDataEqOrdShowReadTypeable ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqFoldableFunctor Typeable1NFDataIArrayMArray PrintfArgDataStorableNFDataIArrayMArray PrintfArgDataStorableNFDataIArrayMArray PrintfArgDataStorableNFDataIArrayMArray PrintfArgDataStorable NFDataNFDataIntegral NFDataOrdIArrayMArray PrintfArgDataStorableBitsIxEqFunctor Applicative Typeable2MArrayMArray ApplicativeMonadFixShowEqDataIxBoundedShowReadEnumOrdEqNFDataIArrayMArray PrintfArgDataStorableShowEqFoldableFunctor Traversable ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqTypeable ExceptionShowEqEqFunctorFoldable Traversable Typeable2 HasResolution HasResolution ExceptionTypeableShowNFDataIArrayMArray PrintfArgDataStorableShowFoldableFunctor TraversableShowTypeableDataShowEqShowEqShowEqReadShowEnumOrdEqTypeable Typeable1NFDataIArrayMArray PrintfArgIsCharDataStorableIx 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 ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqNFDataIArrayMArrayDataStorableIxShowOrdEqMonoidBoundedShowReadOrdEqMonoidBoundedShowReadOrdEqArrow ArrowChoice ArrowApply ArrowLoopCategoryNFDataMonoidDataEqOrdIx-Bounds ByteCountCString| CStringLenaCWStringQ CWStringLen5 ClockTick,ConIndex&DeviceID DiffArray DiffUArrayDoneEdge EpochTimeFileIDFileMode FileOffsetFilePathFinalizerEnvPtrs FinalizerPtrPForest<Generic,GenericB(GenericMGenericQ GenericRGenericTGraphIOErrorIPrKeyLimitMicroPicoPrecProcessGroupID ProcessIDRationalmReadS@ SampleVarShowSStrategyStringTableVertexIntaArrayInta[]Charaa()[]Char[]CharaMVar(,)IntMVaraa[]Char[](,)a[]CharRatioIntegerCPidCPidIntFixedE12FixedE6CLongInt(,)IntInt IOExceptionArrayInt[]Intaammararmamaacacaa[]TreeaaFunPtrPtraIO()envaFunPtrPtrenvPtraIO()[]CharCOffCModeCInoCTime(,)IntInt() IOToDiffArrayIOUArray IOToDiffArrayIOArrayCDevIntCClock(,)PtrCWcharIntPtrCWchar(,)PtrCCharIntPtrCCharCSize(,)IntInt(|n[HnaWhb dcZdUeaRf0NgaLhJiEjDkDlAm>n;o8pb4q+4r(0s)tS%uk#v"w z) i0 gi p< lC iJ sQ tX ZipListzp aw g~ m o d e Mode#"e"o!r a i t e m o d e IOModep!a!m!p!e!d"!a`!m.!o5!n-nk-pJ-tQ-rX- StablePtrar-my-e- StableNamea-c-e,.i-n-g-c-o-m-b-i-n-i-n-g-m.a .r.k.GeneralCategoryGeneralCategorymH.eO.eV.x].cd.ek.pr.ty.i.o.n. SomeExceptionz.e.d.Sizedo /u.t.d.o.w.n. ConsoleEventw/Shows$/ShowSe^/qQ/tD/SetSeqke/f/mq/ox/d/e/SeekModer/o/m/e/n/d/SeekModec/SCCm/p/l/e0v0a0r0 SampleVara3eZ0i90g@0hG0tN0Eitherag2c1l71q0tu0u|0r0n0i0n0o0r0d0e0r0ArgOrdera1u0i0r0e0o0r0d0e1r 1ArgOrderr"1g)1ArgDescra>1tE1iL1vS1eZ1sa1eh1eo1kv1SeekModec!2s1u1p1d1e1r1r1o1r1 RecUpdErrore1l1e1r1r1o2r 2 RecSelErroro(2n/2e62r=2rD2oK2rR2 RecConErrord3ls2Realf2w2o2r2l2d2 RealWorldl2r2a2c2RealFraco2a2t2 RealFloatReadm3p3st3w03r73i>3tE3eL3mS3oZ3da3eh3IOModeReadSReadPr3e3c3ReadPreco3d3e3IOModet3Lexemei3o3Ration 4a4l4Rationals24e94m@4QSemnS4QSemNa6e6i6o|6r4s4t4u4n4c4Lexemer4Ptrt4r4 TextDetailseH6i5o4c5d4u4c5t 5Producte#5s*5s15gW5i=5dD5 ProcessIDr^5oe5ul5ps5iz5d5ProcessGroupIDn5v5a5t5e5u5s5e5GeneralCategoryt5f5a'6t5y6p 6e6 PrintfTyper.6g56 PrintfArgcn6fT6i[6xb6FixityPreco6l6Poolc6o6Picor6m6u6t6e6ArgOrderg7rk7t6t6e7r 7n7m7a 7t'7c.7h57f<7aC7iJ7lQ7PatternMatchFailar7gy7r7a7p7h7s7e7p7a7r7a7t7o7r7GeneralCategorye7m7o7d8e 8Moden:p9r9to8v18e88r?8fF8lM8oT8w[8ArithExceptionhv8e}8r8le9n-9p8s8y8m8b8o8l8GeneralCategoryu8n8c8t8u8a8t9i 9o9n9GeneralCategoryu49m;9bB9eI9rP9GeneralCategoryel9ts9tz9e9r9GeneralCategoryd9Orde9r9i9n9g9Orderingeg:t9aK:d:i:o:n:OptDescre$:s+:c2:r9:OptDescrrR:gY:ArgDescrnn:pu:u|:n:c:t:u:a:t:i:o:n:GeneralCategorye:l:i:n:e:m:o;d;e;Modee,>f=oC;u/;m6;Numap=b(=d=m<n;r;th;a;ht;i{;n;g;Maybes;s;i;g;n;e;d;GeneralCategorye;p;DataReps_<t<e<r<m<i<n$<a+<t2<i9<o@<nG<NonTerminationpf<am<ct<i{<n<g<m<a<r<k<GeneralCategorye<t<h<o<d<e<r<r<o<r= NoMethodErrore=Treeu/=f6=f==eD=rK=iR=nY=g`= BufferModerw=g~=ArgDescrd=a=t=a=NFDatai=o=r=d= NFDataOrdn=t=e=g=r>a >l>NFDataIntegrals3>t:>eA>dH>aO>tV>o]>md>ik>cr>ay>l>l>y>NestedAtomicallya*AiAo?u>v>a>r>MVar#>MVar#t>a?b?l?e?a|?b"?y)?t0?e7?a>?rE?rL?aS?yZ?#a?MutableByteArray#r?r?a?y?#? MutableArray#dT@n?a?o?i?d?Monoidd?Monadf4@p @l@u@s!@ MonadPlusi;@xB@MonadFixe@i`@fg@in@eu@r|@l@s@y@m@b@o@l@GeneralCategorye@t@t@e@r@GeneralCategoryModec ArAoAMicropArAt]Ay@AbGAeNAMaybehdAskAyrAmyAbAoAlAGeneralCategoryrAaAyAMArrayMapaDeCiBoAgBseBwAeBr BcBaBsBe&Bl-Be4Bt;BtBBeIBrPBGeneralCategoryslBosBfzBpBrBeBcBiBsBiBoBnBArithExceptionoBfBfB ConsoleEventmCnCeCb`CsCeCp!Ca(Cr/Ca6Ct=CoDCrKCGeneralCategoryugCfnCfuCe|CrCiCnCgC BufferModeiCtCLimitfODtCxCeCmCeCLexemetDe DrDnDuDm%Db,De3Dr:DGeneralCategorytVDEithermgDonDduDe|DModesDtDLasteDlDeDiDsDlDiDKleisliyDKeyuDsEt EMaybeaiJdHJgJnGoEpEsLEx@EIxcEsXEt_ErfEimEntEg{EIsStringhEaErEIsCharrEIPrIOakGeFmFrFt%FuEaErErFa FyFIOUArrayo,Fd3Fi:FfAFfHFaOFrVFr]FadFykF IOToDiffArrayeFfFIORefoFdFeFIOModerGxFcFeFpFtFiFoFnG IOExceptionrGo$Gr+GIOErrortAGyHGpOGeVG IOErrorTyperrGryGaGyGIOArraydIfIiBItGInt #4I1I3I6H8HcHegHmIHp+HrHsGeGtHIntSeteHpHDataRept2Hr9HIntPtraPHpWHIntMapgnHeHrzHaHlHIntegralrHIntegeroHnHsHtHrH ConstrRepInt84HInt642IInt326%IInt16Int#tIIiPIaWIl^IqeIulIosItzIeIGeneralCategoryiIxIFixityeIxIoIuItIoIfIbIoIuInIdJs JArrayExceptionn&Jo-Jr4Je;JHandlereOJnVJt]JLexemerpJrwJa~JyJIArrayaTKeJpJrJiJnJtJfJtJyJpJeJ HPrintfTypeaKpKoKvKeKr$Kf+Kl2Ko9Kw@KAsyncExceptionnKs`KhKrlKesKszKoKlKuKtKiKoKnK HasResolutiontKaKbKlKeK HashTabledKlLe LHandlep8Lr'LHandlero?LsFLnML HandlePosneLmLqLrLt|L GenericT'aLpLhLGraph GenericQ' GenericM'nLeLrLaMiLcLGeneric'MbMmMq`MrNMt$MGenericT';M GenericT'GenericRGenericQ'wM GenericQ'GenericM'M GenericM'GenericBGeneric'lMcMaMtMeMgNo NrNyNGeneralCategorydURi]PlOoNrNuPNnWNcNpcNtjNrqNFunPtrtNoNrNFunctoraNcNtNiNoNnNaNlN FractionallOrNe.Om OaOtOGeneralCategoryiQOs:OtAOForestgXOn_OpfOtmOrtO ForeignPtrdOaObOlOeOFoldableoOaOtOFloatc+Pi PrOeOpODataRepnPgPFloatingo2Pn9Ps@PtGPrNP ConstrReplQnPrPxsPePiPtPyPFixitydPFixedsPtPFirstaPlPiQqPuPoPtPeQGeneralCategoryz"Qe)Qr0Qe`QpRmRoQpQaQtQhQFilePathfQfQsQeQtR FileOffsetoRd%Re,RFileModedERFileIDFd 1U6UdUi{UmDUnToTpWTqKTrSxRcSiRtRczSe3SfRsRuRcRcReRsRsRExitCodeaSi SlSuSrSe%SExitCodex:ScASeHSpOStVSi]SodSnkS ExceptionoSdSeSExitCodeeSpStSiSoSnS Exception ExceptionrSn5ToSrTc TaTlTl"T ErrorCallo\tE\rL\CUIntPtrae\xl\CUIntMaxh\a\r\CUChari\m\e\CTimec]h]i[]s6]t\r\i\n\g\CStringl]e]n"] CStringLeni=]zD]eK]CSsizeg}]zg]en]CSizea]t]o]m]i]c] CSigAtomico]r]t]CShorth]a]r]CSChariF^t^r^d^i&^f-^f4^CPtrdiffdM^CPidf@`m`nl^i_n`_s^t^r^o^l^GeneralCategoryc^ ConsoleEvento_t^Constr^Constrr^e^p_ ConstrRepl _e'_e._v5_e<_nC_tJ_ ConsoleEventeg_cn_tu_o|_r_p_u_n_c_t_u_a_t_i_o_n_GeneralCategoryn_d_e_x`ConIndexp`l!`e(`x/`ComplexfG`COffo\`dc`ej`CModedal`ao`c*anas`e` ConsoleEventp`u`n`c`t`u`a`t`i`o`n`GeneralCategorygaCLongk1at8ai?acFakMa ClockTickogannaguaCLLongoauabalaeaCLDoublemapabauafaCJmpBufnaoWbtbCIntm8bpbt br'bCIntPtra?bxFbCIntMaxCInoabrqb TextDetailsnbrbCharChaniblbpbobsbCFposobabtbCFloatlce cCFileeSco&cu-cb4cl;ceBcCDoublevZcCDevhcltco{ccckcCClockacrcCChartcccecgcocrcycCategoryhcHandleri;hlEeodrduody+dt2de9dc@doGduNdnUdt\d ByteCountfvdf}dedrdmdoddded BufferModeedadkd ConsoleEvento0eudndddeeseBoundsdeBoundedl7eBooloLecSekZebgeerkeereayeseoene BlockReasondeigoeneb@gdfeffTfm.fofseteme BlockReasontfhfefrf BlockReasonv5faiaEiiLilSieZidaiAssertionFailedgki[kriajoiwiArrowajcsjlKjmjpizieirioi ArrowZeroliujsj ArrowPluso"jn)ja0jd7j ArrowMonadoRjoYjp`j ArrowLoophzjojijcjej ArrowChoicepjpjljyj ArrowApplyyjArray#Kkejxkc kekpktki%ko,kn3kArrayExceptionArray#tbkhikepkxwkc~kekpktkikoknkArithExceptiondkokrkdkekrkArgOrderelslclrlArgDescrp/lell;liBlcIlaPltWli^lvelell ApplicativenldlmloldlelIOModeylAnyg6ml)mtlelrlnlaltlimv mem AlternativeAllc]mrBmeImpPmDataRepodmnkmsrmtymrm ConstrRepdmrm#mAddr#ymcmlmimcmsmcmcmSCCsmonl nuntnens%ne,ne3nk:nSeekMode:`n]Tn[]:gn]nn[::])n()n#p poRoonn()b ()cba(,,)()abArray()ba(,)()a[]()b[]()a b  cbaAssoc a[]b[]c[]cprrqqqppcba()a  ()b()cbacbb[]a()b[]()Inta  b   a[]b[]ba(,)[]uuuguSu;uu utttttt}t^tJt-ttssssssusStrategy StrategyStrategyStrategyStrategy'Strategy&Strategy#Strategy"IxbStrategyStrategyIntegralbStrategy$IntegralaStrategy)+Strategy-Strategy(NFDataa NFDataa*Done NFDataaStrategy!Strategy%StrategyStrategyStrategy DoneNFDataaStrategy,zzzzzzhzXzHz6z zzyyyyy\yDy&yyxxxxtxZx||>z>|| >|Oz>| :=_z:= .||pz.|| .|z.| -||z-||-|z-|$||z$||$|z$|- h^AFܙDnuBX%Rב :685G rFE~]}{usingusing :: a ->  Strategy a -> a{{aStrategyaahTakes 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 -> Done}vA strategy takes a value and returns a Done value to indicate that the specifed evaluation has been performed. sSeqsSeq :: a ->  Strategy bl~W~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 -> aaDoneaEvaluates 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 baStrategybA 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 -> b߁ƁNFDataaabb seqTriple  seqTriple ::  Strategy a ->  Strategy b ->  Strategy c -> Strategy (a, b, c)jStrategyaStrategybStrategycStrategy(,,)abcWApply three strategies to the elements of a triple in sequentially from left to right. seqPairseqPair ::  Strategy a ->  Strategy b -> Strategy (a, b)|StrategyaStrategybStrategy(,)abPApply two strategies to the elements of a pair sequentially from left to right.  seqListNth seqListNth :: Int ->  Strategy b ->  Strategy [b]pIntStrategybStrategy[]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]IntegralaaStrategybStrategy[]bCSequentially applies a strategy to the first n elements of a list. seqListseqList ::  Strategy a ->  Strategy [a]StrategyaStrategy[]a;Sequentially applies a strategy to each element of a list. seqArrseqArr :: Ix b =>  Strategy a -> Strategy (Array b a)KIxbStrategyaStrategyArrayba;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 auNFDataaStrategyar0r0 ::  Strategy aՈňStrategya/Performs no evaluation of its argument.  parZipWith  parZipWith ::  Strategy c ->  (a -> b -> c) -> [a] -> [b] -> [c]ʼnStrategycabc[]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)StrategyaStrategybStrategycStrategy(,,)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]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]EIntStrategyaStrategy[]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]qStrategyaStrategy[]a;Applies a strategy to every element of a list in parallel.  parFlatMap  parFlatMap ::  Strategy [b] ->  (a -> [b]) -> [a] -> [b]LStrategy[]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]jIntStrategya[]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)IxbStrategyaStrategyArrayba:Apply a strategy to all elements of an array in parallel. NFDataclass NFData aTfstPairFstListfstPairFstList ::  NFData a => Strategy [(a, b)]ߖNFDataaStrategy[](,)abforceforce ::  NFData a => a -> a>(NFDataaaaDonetype Done = ()q demanding demanding :: a -> Done -> a՗ƗaDoneaEvaluates the second argument before the first. Used to express control-oriented parallelism. The second argument is usually a strategy application. Assocdata Assoc a b>|| (>||) :: Done -> Done -> DoneDoneDoneDone:Evaluates the first argument in parallel with the second. >| (>|) :: Done -> Done -> DoneDoneDoneDone0Evaluates the first argument before the second. := (:=) :: a -> b ->  Assoc a bB*abAssocab.||(.||) :: (b -> c) ->  Strategy b -> (a -> b) -> a -> cbcStrategybabacParallel 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 -> c*bcStrategybabacSequential 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 -> c_7abStrategybbcacParallel 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 -> cabStrategybbcacSequential 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 -> b7abStrategyaab~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 -> babbRSemantically 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 -> babbIndicates 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. StrategiesParallel 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 parallelXparallel programming library This package provides a library for parallel programming. Parallelmodule Control.Parallel@Parallel Constructs dControlParallel StrategiesControlParallelparallel1.1.0.1Fhttp://hackage.haskell.org/packages/archive/parallel/1.1.0.1/doc/html/Chttp://hackage.haskell.org/cgi-bin/hackage-scripts/package/parallel