HOOGX{a c d e gh i km n o p r s tu v w yzyx w{m()->zAllYAny8ArithException+Array#ArrayExceptionAsyncException Bool BufferMode BufferStateCCharmCClock;CDev CDoubleCFloatWCInoCIntCIntMaxCIntPtr7CLDoubleCLLongCLongNCModeCOffCPidvCPtrdiff.CSCharCShort CSigAtomicVCSizeCSsizeCTimeCUCharLCUIntCUIntMaxCUIntPtrtCULLong,CULongCUShortCWcharTChanICharComplex ConsoleEventConstr ConstrRepDataRepDataTypeDouble3Dynamic$E12E6Errno ExceptionExitCodeFDTypeFdFixityFloat%GeneralCategoryHandle HandlePosn HandleTypeHashDataIO IOErrorType IOExceptionIOModeIdxInsertstIntInt16 Int32W Int64 Int8 IntPtrQ Integer Lexeme Maybe Ordering Pu QSemk QSemNa ReadPH ReadPrec/ STM STUArray SeekMode StableName TArray TVar ThreadId Timeout TyCon TypeRep UArray Unique Version Weak Word Word16 Word32Word64bWord8WordPtrZipList[::][]H TraversableFoldableMonadFix Applicative Alternative MonadPlusFunctorMonadFunctorMonadFunctor Applicative ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray PrintfArgStorableDataEqOrdNumEnumIntegralBitsShowRealBoundedIxReadIArrayMArray PrintfArgStorableDataNumEnumIntegralBitsShowRealBoundedIxReadOrdEqIArrayMArray PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray Typeable1EqOrdShowReadTypeableOrdEq Typeable2IArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayIArrayDataDataEqTypeableDataShowEqOrdTypeable Typeable1MArray Typeable1ShowReadEnumIxOrdEq Typeable3MArray MonadPlus Typeable1FunctorMonadFunctorMonad MonadPlusFunctorMonad MonadPlusTypeableTypeableMonad MonadPlus MonoidDataReadShowBoundedEnumIxOrdEq TraversableFoldableMonadFix Applicative AlternativeFunctorMonad MonadPlusShowEqRead PrintfArgBitsDataReadEqOrdNumEnumShowIxRealIntegral ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEq PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray PrintfArgStorableDataEqOrdShowNumEnumIntegralReadBitsRealBoundedIxIArrayMArray PrintfArgStorableDataShowNumEnumIntegralReadBitsRealBoundedIxOrdEqIArrayMArray PrintfArgStorableDataShowNumRealEnumIntegralBoundedIxReadBitsOrdEqIArrayMArray PrintfArgBitsStorableDataReadShowNumBoundedEnumIxRealIntegralEqOrdIArrayMArrayEqFunctor ApplicativeShowReadEnumIxOrdEqEqShowEqShowMonadFix ApplicativeFunctorMonadShowEqShowEqShowDataEqShowIxBoundedShowReadEnumOrdEq PrintfArgStorableDataEqOrdNumReal FractionalRealFracFloating RealFloatShowEnumReadIArrayMArrayShowEq ReadShowTypeableBitsIntegralBoundedRealStorableEnumNumOrdEqEqShowReadOrdEqShowEqEq HasResolution HasResolutionTypeableShow PrintfArgStorableDataEqOrdNumReal FractionalFloatingRealFrac RealFloatShowEnumReadIArrayMArrayTypeableDataShowShowEqShowEqShowEqReadShowEnumOrdEqTypeable Typeable1 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 StorableDataReadShowBoundedEnumIxOrdEqIArrayMArrayShowOrdEqShowOrdEqIArrayShowOrdEqMonoidBoundedShowReadOrdEqMonoidBoundedShowReadOrdEqArrow ArrowChoice ArrowApply ArrowLoop MonoidDataReadShowBoundedEnumIxEqOrd7 ByteCount CDir CDirent CFLock CGroup CLconv CPasswd CSigaction CSigset~ CStaty CStringj CStringLenO CTermiosJ CTmE CTms@ CUtimbuf; CUtsname6 CWString& CWStringLen ClockTick ConIndexDeviceID DiffArray DiffUArray EpochTimeFDFileIDFileMode FileOffsetFilePathFinalizerEnvPtrX FinalizerPtr5Generic%GenericB!GenericMGenericQGenericRGenericTHandlePositionIOErrorIPrLimit ListUArrayMicroPicoxPrecrProcessGroupIDk ProcessIDdRationalQ RawBuffer0ReadSSTRep SampleVarShowSString[]Char[]Char[]CharaMVar(,)IntMVarasaState#s(#,#)State#saa[]Char[](,)a[]CharMutableByteArray# RealWorldRatioIntegerCPidCPidIntFixedE12FixedE6e(,)ii[]eUArrayieCLong(,)IntInt IOExceptionIntegeraammararmamaacacaaFunPtrPtraIO()envaFunPtrPtrenvPtraIO()[]CharCOffCModeCInoCIntCTime IOToDiffArrayIOUArray IOToDiffArrayIOArrayCDevIntCClock(,)PtrCWcharIntPtrCWchar()()()()()(,)PtrCCharIntPtrCChar()()()()()()()()()CSize(x:x[bxaHrbncbd ^eZfTgKShPiIjHkHlEmvBnp?o$<p8q7r1s+t'u$v$wr!z7!i>!pE!lL!iS!sZ!ta!ZipList#$1$3o$6U$8C$e$oA#r!aO"i!t!e!b"h!m!o!d!e!IOModea!n!d!l"e " HandleTypeu""f)"f0"e7"r>" BufferStatepV"a#m"pg"en"du"a"m"o"n"a"d" WrappedMonadr"r"o"w" WrappedArrowo"n"a"d# WrappedMonadr#r!#o(#w/# WrappedArrowrH#dO#Word#$1#3#6#8#p{#t#r#WordPtrWord84#Word64##Word64#2#Word326#Word16Word#a$k!$Weak#4$Weak##J$Word84\$#c$Word642v$#}$Word326$#$Word16Worde$r$s$i$o$n$Versiona'n%p@%s$e%r %e%r%r!%o(%r/% IOErrorTypepG%eN%rU%c\%ac%sj%eq%lx%e%t%t%e%r%GeneralCategoryd'i&s%aN&u%p%p%o%r%t%e%d%o&p &e&r&a!&t(&i/&o6&n=& IOErrorTypetU&i\&sc&fj&iq&ex&d&c&o&n&s&t&r&a&i&n&t&s& IOErrorTypeq&t&Unitu&e'Uniquee'fX'r('f/'l6'o='wD'ArithExceptioni_'nf'em'dt'e{'l'e'm'e'n't'ArrayExceptionr'r'a'y'UArrayaU+c1+h*i)m)rU)v9)y(c)p(e"(aM(r.(e5(p<(TypeRepbT(l[(eb(Typeable1 )2(3(4(5(6(7( Typeable7 Typeable6 Typeable5 Typeable4 Typeable3 Typeable2 Typeable1o#)n*)TyCona@)rG)TVarar)ua)eh)Boolvy)e)r)s)a)b)l)e) Traversablev)a)r)TMVarmX*t)l)e)c*a *s*e*l *e'*t.*t5*e<*rC*GeneralCategorye_*ef*xm*pt*i{*r*e*d* IOErrorTyper*e*a*d*i+k*i*l*l*e*d*AsyncExceptiond+ThreadId#+ ThreadId#h8+a?+nF+TChanr\+rc+aj+yq+TArray#1aN1ee0h/pN/ty,u!,y+m,s+t+e+m+e+r+r+o+r+ IOErrorTypeb,o,l,Lexememl,r-,r4,o;,gB,aI,tP,eW,GeneralCategorySumSTa$.m.o-r,u,a,r,r,a,y,STUArrayeT-i,n,g,Stringc"-r-e-p-DataRepo)-n0-s7-t>-rE- ConstrRepa-f-py-tj-STretSTRepSTRefm-FDTyper-a-b-l-e-Storablea-r-r-a-y. StorableArraySTMb.c~.rX.t:.eA.#H.State#r_.af.ym.STArrayk.o.v.e.r.f.l.o.w.AsyncExceptionl.e.n%/p.t.r. StablePtr#/ StablePtr#a,/m3/e:/ StableNameaU/c\/e/ih/no/gv/c}/o/m/b/i/n/i/n/g/m/a/r/k/GeneralCategoryGeneralCategoryo<0u0t0d0o0w#0n*0 ConsoleEventwC0ShowsV0ShowSe0mq0ix0c0l0o0s0e0d0h0a0n0d0l0e0 HandleTypek0f1m0o0d0e1SeekModer1o$1m+1e21n91d@1SeekModemU1p\1lc1ej1vq1ax1r1 SampleVarIntegera7e1i1g1h1t1Eithera4c.4g3l3q/3sJ2t1u1r2n 2i2n2o 2r'2d.2e52r<2ArgOrderoQ2uX2r_2cf2em2b 3e2v~2a2n2i2s2h2e2d2 IOErrorTypex2h2a2u2s2t2e2d2 IOErrorTypeu3s3y3 IOErrorTypea3u;3iB3rI3eP3oW3r^3de3el3rs3ArgOrderr3g3ArgDescra3t3i3v3e3s3e3e3k3SeekModeu3l3a3r4f 4i4l4e"4FDTypec4s4u?4pF4dM4eT4r[4rb4oi4rp4 Exceptione4l4e4r4r4o4r4 Exceptiono4n4e4r4r4o4r4 Exceptiond5l 5RealfR5w#5o*5r15l85d?5 RealWorldl~5r^5ae5cl5RealFraco5a5t5 RealFloatReadb6h6m6p]6sN6w5r5i5t5e5h6m5o6d6e6IOModea"6n)6d06l76e>6 HandleTypeReadSReadPrq6ex6c6ReadPreco6d6e6IOModea6n6d6l6e6 HandleTypeu6f6f6e7r7 BufferStatet7w%7b`7d17e87v?7iF7cM7eT7FDTypeug7fn7fu7e|7r7 RawBufferLexemei7o7Ration7a7l7Rationals7e7m7QSemn 8QSemNa0;e:i:od:rl8tX8u>8nE8cL8Lexemer_8Ptre0:i9o}8c9d8t8o8c8o8l8e8r8r8o8r8 IOErrorTypeu8c8t8Producte 9s9s9g?9i%9d,9 ProcessIDrF9oM9uT9p[9ib9di9ProcessGroupIDn9v9a9t9e9u9s9e9GeneralCategoryt9f9a:t9y9p9e9 PrintfTyper:g: PrintfArgcV:f<:iC:xJ:FixityPrecok:lr:Poolc:o:Picor:m:i:u:t:e:ArgOrders:s:i:o:n:d:e;n ;i;e;d; IOErrorTyper;t<;tC;eJ;rQ;nX;m_;af;tm;ct;h{;f;a;i;l; Exceptiona;g;r;a;p;h;s;e;p;a;r;a;t<o<r<GeneralCategoryOpaquebD?p.>r=t<vI<eP<rW<f^<le<ol<ws<ArithExceptionh<e<r<e=l=nJ=p<s<y<m<b<o<l<GeneralCategoryu<n<c=t =u=a=t =i'=o.=n5=GeneralCategoryuQ=mX=b_=ef=rm=GeneralCategorye=t=t=e=r=GeneralCategoryr=r=o=r= IOErrorTyped=Orde>r>i>n>g>Orderinga?e>t?>a>dl>iP>oW>n^>OptDescres>sz>c>r>OptDescrr>g>ArgDescrn>p>u>n>c>t>u>a>t>i>o?n ?GeneralCategoryq&?u-?e4?OpaquejK?eR?cY?t`?ObjecteBo?u?m?NumaAbAmLAn@ru@s,@t?a?h?i?n?g?Maybes?s?i?g@n @e@d@GeneralCategoryu3@c:@hA@tH@hO@iV@n]@gd@ IOErrorTypee|@p@DataReps@t@e@r@m@i@n@a@t@i@o@n@ Exceptionp@a@cAi AnAgAm"Aa)Ar0Ak7AGeneralCategoryeSAtZAhaAohAdoAevAr}ArAoArA ExceptionuAfAfAeArAiAnAgA BufferModerAgAArgDescrs BtBeBd!Ba(Bt/Bo6Bm=BiDBcKBaRBlYBl`BygB ExceptionaEiDoCuBvBaBrBMVar#BMVar#tBaBvBaBrB#BMutVar#bClCeCauCbCy"Ct)Ce0Ca7Cr>CrECaLCySC#ZCMutableByteArray#r|CrCaCyC#C MutableArray#dMDnCaCoCiCdCMonoiddCMonadf-DpDl DuDsD MonadPlusi4Dx;DMonadFixiTDf[DibDeiDrpDlDs|DyDmDbDoDlDGeneralCategoryeDtDtDeDrDGeneralCategorycDrDoEMicrorEt>Ey!Eb(Ee/EMaybehEEsLEySEmZEbaEohEloEGeneralCategoryrEaEyEMArrayaHeGiFoEtEOrderinggFsLFwEeErEcEaEsFe FlFeFt"Ft)Fe0Fr7FGeneralCategorysSFoZFfaFphFroFevFc}FiFsFiFoFnFArithExceptionoFfFfF ConsoleEventmGn1GsFtFuFaGrGrGaGyG ListUArraye8GbGsDGeKGpRGaYGr`GagGtnGouGr|GGeneralCategoryuGfGfGeGrGiGnGgG BufferModeiGtGLimitfHt,HxHeHmHeHLexemet3He:HrAHnHHuOHmVHb]HedHrkHGeneralCategorytHEithersHtHLastlHeHiHsHlHiHKleisli#IuHsHtIMaybeInteger#P1|P3cP6JP89Pa PdOgOlPOnKoIpIspIxdIIxcIs|ItIrIiInIgIIsStringhIaIrIIsCharrIIPrIOaKeJmJrJtIJuJaJr"Jr)Ja0Jy7JIOUArrayoPJdWJi^JfeJflJasJrzJrJaJyJ IOToDiffArrayeJfJIORefoJdJeJIOModer:KxJcJeKp KtKiKoKn%K IOExceptionrAKoHKrOKIOErrorteKylKpsKezK IOErrorTyperKrKaKyKIOArrayaNdnNfTNiNlMrMtKLvKaKlKiKdLa LrLgLuLm%Le,Ln3Lt:L IOErrorTypeInt #M1M3M6M8{McIMeLpLrLeLpLDataReptLrLIntPtrgMrLrLuLpLtLeLdL IOErrorTypee1MrMaMlMIntegralr8MIntegeroPMnWMs^MteMrlM ConstrRepInt84MInt64#MInt64#2MInt326MInt16Int#:+::+:tNiNaNlNq#Nu*No1Nt8Ne?NGeneralCategoryi[NxbNFixityeuNx|NoNuNtNoNfNbNoNuNnNdNsNArrayExceptionpNpNrNoNpOrOiOaOtOe#Ot*Oy1Op8Oe?O IOErrorTypelWOe^OgeOalOlsOozOpOeOrOaOtOiOoOnO IOErrorTypenOoOrOeOHandlereOnOtPLexemerPrPa"Py)PIArray#@PInt84QP#XPInt642jP#qPInt326P#PInt16Inta]QeQpPrPiPnPtPfPtPyPpPeP HPrintfTypea QpQoQvQe&Qr-Qf4Ql;QoBQwIQAsyncExceptionn]RrRsnQhQrzQeQsQoQlQuQtQiQoQnQ HasResolutiontQaQbQlQeQ HashTabled RwRaRr"Re)Rf0Ra7Ru>RlERtLR IOErrorTypeddRlkRerRHandle_2SpRrRtRyRpReR HandleTypeHandleroRsRiRnR HandlePosntSi SoSnSHandlePosition_9SHandle__eSm~SqoStaSOrdering GenericQ' GenericM'nSeSrSaTiScSGeneric'TbtTmJTq TrTtSGenericT'S GenericT'GenericRGenericQ'7T GenericQ'GenericM'aT GenericM'GenericBGeneric'lTcTaTtTeTgToTrTyTGeneralCategory #ZaZdZfYiwWlVoUrvUuUn&UcPUp2Ut9Ur@UFunPtrtWUo^UreUFunctora}UcUtUiUoUnUaUlU FractionallVrUeUmUaUtUGeneralCategoryiVg VnVpVt Vr'V ForeignPtrc@VoGVnNVtUVe\VncVtjVsqVForeignPtrContentsdVaVbVlVeVFoldableoVaVtVFloat#gWc5WiWrVeWpWDataRepnWg#WFloatingoieEivLieSinZitai ConsoleEvente~icitioiripiuinicitiuiaitiiioiniGeneralCategorynjd jejxjConIndexp1jl8je?jxFjComplexf^jCOffosjdzjejCModecldklkojcknoksjej ConsoleEventd5kpjujnjcjtjujakt kikokn kGeneralCategoryhucEueLupSutZuiauohunouArithExceptionduourudueuruArgOrdereusucuruArgDescrpueHvlvi vcvavtvi%vv,ve3v ApplicativenOvdVvhvmbvoivdpvewvIOModeavnvdvlvev HandleTypeyvAnygwlwr-wtvevrvnvavtwi wvwew Alternativee4wa;wdBwyIwePwxWwi^wsewtlwssw IOErrorTypeAllcwrwewpwDataRepownwswtwrw ConstrRepdwrw#wAddr#sxoxl#xu*xt1xe8xs?xeFxeMxkTxSeekMode:zx]nx[]:x]x[::]*x+x:x:+::x:*:)x()xhyx()STM BoolSTM  aSTM  aMaybeSTMaTChanIOaTChanSTMaTMVarIOaTMVarSTMzZzzBoola   aTChanaTMVar {{{{{{{r{g{\{M{B{7{,{!{{ {     ~~~~q~G~+~ ~}}}}w}X}:}}}||||r|R|2| writetchanA| writeTChan ungettchana| unGetTChantvar{|TVar trytaketmvar| tryTakeTMVar tryputtmvar| tryPutTMVartmvar|TMVartchan|TChantarray }TArray taketmvar*} takeTMVar swaptmvarH} swapTMVarstm`}STMstm readtmvar} readTMVar readtchan} readTChanputtmvar}putTMVar newtmvario} newTMVarIOnewtmvar}newTMVar newtchanio~ newTChanIOnewtchan8~newTChan newemptytmvario[~newEmptyTMVarIO newemptytmvar~ newEmptyTMVar isemptytmvar~ isEmptyTMVar isemptytchan~ isEmptyTChan duptchan~dupTChancheckcheck(FבE-5r)& writeTChan writeTChan :: TChan a -> a -> STM ()TChanaaSTM()!Write a value to a TChan.  unGetTChan unGetTChan :: TChan a -> a -> STM ()TChanaaSTM()JPut a data item back onto a channel, where it will be the next item read.  tryTakeTMVar tryTakeTMVar :: TMVar a ->  STM (Maybe a)gETMVaraSTMMaybeaA version of takeTMVar that does not retry. The tryTakeTMVar function returns Nothing if the TMVar was empty, or Just a if the TMVar was full with contents a. After tryTakeTMVar, the TMVar is left empty.  tryPutTMVar tryPutTMVar :: TMVar a -> a -> STM BoolTMVaraaSTMBoolA version of putTMVar that does not retry. The tryPutTMVar function attempts to put the value a into the TMVar, returning True if it was successful, or False otherwise. TMVardata TMVar aA TMVar is a synchronising variable, used for communication between concurrent threads. It can be thought of as a box, which may be empty or full. TChandata TChan a܄ITChan is an abstract type representing an unbounded FIFO channel. TArraydata TArray i eYTArray is a transactional array, supporting the usual MArray interface for mutable arrays. It is currently implemented as Array ix (TVar e), but it may be replaced by a more efficient implementation in the future (the interface will remain the same, however).  takeTMVar takeTMVar :: TMVar a -> STM aֆTMVaraSTMaReturn the contents of the TMVar. If the TMVar is currently empty, the transaction will retry. After a takeTMVar, the TMVar is left empty.  swapTMVar swapTMVar :: TMVar a -> a -> STM aTMVaraaSTMa5Swap the contents of a TMVar for a new value.  readTMVar readTMVar :: TMVar a -> STM aTMVaraSTMaThis is a combination of takeTMVar and putTMVar; ie. it takes the value from the TMVar, puts it back, and also returns it.  readTChan readTChan :: TChan a -> STM axTChanaSTMa+Read the next value from the TChan. putTMVarputTMVar :: TMVar a -> a -> STM ()4TMVaraaSTM()kPut a value into a TMVar. If the TMVar is currently full, putTMVar will retry.  newTMVarIO newTMVarIO :: a ->  IO (TMVar a) aIOTMVaraIO version of newTMVar. This is useful for creating top-level TMVars using System.IO.Unsafe.unsafePerformIO, because using atomically inside System.IO.Unsafe.unsafePerformIO isn't possible. newTMVarnewTMVar :: a ->  STM (TMVar a)M4aSTMTMVara9Create a TMVar which contains the supplied value.  newTChanIO newTChanIO ::  IO (TChan a)ތˌIOTChanaIO version of newTChan. This is useful for creating top-level TChans using System.IO.Unsafe.unsafePerformIO, because using atomically inside System.IO.Unsafe.unsafePerformIO isn't possible. newTChannewTChan ::  STM (TChan a)STMTChana1Build and returns a new instance of TChan newEmptyTMVarIOnewEmptyTMVarIO ::  IO (TMVar a)IOTMVaraIO version of newEmptyTMVar. This is useful for creating top-level TMVars using System.IO.Unsafe.unsafePerformIO, because using atomically inside System.IO.Unsafe.unsafePerformIO isn't possible.  newEmptyTMVar newEmptyTMVar ::  STM (TMVar a)ЏSTMTMVara0Create a TMVar which is initially empty.  isEmptyTMVar isEmptyTMVar :: TMVar a -> STM BoollTMVaraSTMBoolKCheck whether a given TMVar is empty. Notice that the boolean value returned is just a snapshot of the state of the TMVar. By the time you get to react on its result, the TMVar may have been filled (or emptied) - so be extremely careful when using this operation. Use tryTakeTMVar instead if possible.  isEmptyTChan isEmptyTChan :: TChan a -> STM BoolG+TChanaSTMBool;Returns True if the supplied TChan is empty. dupTChandupTChan :: TChan a ->  STM (TChan a)גTChanaSTMTChanaDuplicate a TChan: the duplicate channel begins empty, but data written to either channel from then on will be available from both. Hence this creates a kind of broadcast channel, where data written by anyone is seen by everyone else. checkcheck :: Bool -> STM aB/BoolSTMaTVarmodule Control.Concurrent.STM.TVarTVar: Transactional variables TMVarmodule Control.Concurrent.STM.TMVar@TMVar: Transactional MVars, for use in the STM monad (GHC only) TChanmodule Control.Concurrent.STM.TChang)TChan: Transactional channels (GHC only) TArraymodule Control.Concurrent.STM.TArrayՕ8TArrays: transactional arrays, for use in the STM monad stmpackage stm2MSoftware Transactional Memory A modular composable concurrency abstraction. STMmodule Control.Monad.STMSoftware Transactional Memory: a modular composable concurrency abstraction. See This module only defines the STM monad; you probably want to import Control.Concurrent.STM (which exports Control.Monad.STM). STMmodule Control.Concurrent.STMhSoftware Transactional Memory: a modular composable concurrency abstraction. See ϚtControl ConcurrentSTMTArrayControl ConcurrentSTMTChanControl ConcurrentSTMTMVarControl ConcurrentSTMTVarControlMonadSTMControl ConcurrentSTMstm2.1.1.0Ahttp://hackage.haskell.org/packages/archive/stm/2.1.1.0/doc/html/>http://hackage.haskell.org/cgi-bin/hackage-scripts/package/stm