h$P@B      !"#$%&'()*+,-./ 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                             None#$'(-/258>? effectfulProvide the ability to run  computations concurrently in multiple threads and communicate between them.Warning:4 unless you stick to high level functions from the  family, the  effect makes it possible to escape the scope of any scoped effect operation. Consider the following:-import qualified Effectful.Reader.Static as RprintAsk msg = liftIO . putStrLn . (msg ++) . (": " ++) =<< R.ask:{4 runEff . R.runReader "GLOBAL" . runConcurrent $ do% a <- R.local (const "LOCAL") $ do a <- async $ do printAsk "child (first)" threadDelay 20000! printAsk "child (second)" threadDelay 10000 printAsk "parent (inside)" pure a printAsk "parent (outside)" wait a:}child (first): LOCALparent (inside): LOCALparent (outside): GLOBALchild (second): LOCALNote that the asynchronous computation doesn't respect the scope of <, i.e. the child thread still behaves like it's inside the = block, even though the parent thread already got out of it.*This is because the value provided by the  effect is thread local, i.e. each thread manages its own version of it. For the  it is the only reasonable behavior, it wouldn't be very useful if its "read only" value was affected by calls to " from its parent or child threads.However, the cut isn't so clear if it comes to effects that provide access to a mutable state. That's why statically dispatched State and Writer0 effects come in two flavors, local and shared:3import qualified Effectful.State.Static.Local as SL:{1 runEff . SL.execState "Hi" . runConcurrent $ do1 replicateConcurrently_ 3 $ SL.modify (++ "!"):}"Hi"4import qualified Effectful.State.Static.Shared as SS:{1 runEff . SS.execState "Hi" . runConcurrent $ do1 replicateConcurrently_ 3 $ SS.modify (++ "!"):}"Hi!!!"In the first example state updates made concurrently are not reflected in the parent thread because the value is thread local, but in the second example they are, because the value is shared. effectfulRun the  effect.None#$'(-/258>? effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .  None#$'(-/258>?F8 effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .      None#$'(-/258>? effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .None#$'(-/258>?  effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted ... None#$'(-/258>?$d effectfulLifted . effectfulLifted " that evaluates the value to WHNF. effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted & that evaluates the new value to WHNF. effectfulLifted . effectfulLifted & that evaluates the new value to WHNF. effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted & that evaluates the new value to WHNF. effectfulLifted & that evaluates the new value to WHNF. effectfulLifted & that evaluates the new value to WHNF. effectfulLifted & that evaluates the new value to WHNF. effectfulLifted ...None#$'(-/258>?%[ effectfulLifted . effectfulLifted . effectfulLifted .None#$'(-/258>?& effectfulLifted . effectfulLifted . effectfulLifted .None#$'(-/258>?(  effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted ._`abcdefghijklmnopqrstuvwxyz{|}~_ba`wvutrponsqm{x~}|zylkihfegjdc None#$'(-/258>?*  effectful?+ effectful.An effect for interacting with the filesystem. effectfulRun the  effect. None#$'(-/258>?2/0 effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted ./0123495687=<;:@?>=<;:@?>/9487653210None#$'(-/258>?5 effectfulLifted . effectfulLifted . effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted ) $#"!('&%-,+*))-,+*) $#"!('&% None#$'(-/258>?7  effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .   None#$'(-/258>?; effectful0An effect for running child processes using the process library. effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .3ABCDUTSRQPONMLKJIHGFEXWV]\[ZY^3BCUTSRQPONMLKJIHGFEXWV]\[ZY^ADNone#$'(-/258>?> effectful/An effect for interacting with temporary files. effectfulRun the  effect. effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulFile name template. See . effectfulCallback that can use the file. effectfulDirectory name template. See . effectful$Callback that can use the directory. effectfulTemp dir to create the file in. effectfulFile name template. See . effectfulCallback that can use the file. effectful*Temp directory to create the directory in. effectfulDirectory name template. See . effectful$Callback that can use the directory.None#$'(-/258>?@2 effectful&An effect for timing out computations. effectfulRun the  effect. effectfulLifted . effectful-The timeout in microseconds (1/10^6 seconds). effectful'The computation the timeout applies to. !"#$%&'())**+,-./01234356768696:6;6<6=6>6?3@ABCDEFEGEHEIJKJLJMJNJOPQRSTRSURSVRSWRSXRSYRZ[RZ\RZ]RZ^RZ_RZ`RZaRZbRZcRZdRZeRZfghighjghkghlgmngmogmpgmqgmrgmsgmtgmugmvgmwgmxgmygmzgm{gm|gm}gm}gm~gmgmgmgmgmgmgmgm                                                                                                           ------66+6666666666++++++++6PPPPPPPPP///111666RSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRSRS3ghgghghghghghghghghghghghghghghggg(effectful-1.2.0.0-5tjuW5xNKZwDoqJ0zr83gBEffectful.FileSystem.IOEffectful.Concurrent.AsyncEffectful.ConcurrentEffectful.Concurrent.ChanEffectful.Concurrent.QSemEffectful.Concurrent.QSemNEffectful.Concurrent.STMEffectful.Concurrent.MVarEffectful.FileSystemEffectful.Process Effectful.Concurrent.MVar.StrictEffectful.EnvironmentEffectful.FileSystem.IO.FileEffectful.TemporaryEffectful.TimeoutEffectful.Concurrent.Effect withAsyncEffectful.Reader.StaticlocalReaderEforkOSWithUnmaskEffectful.FileSystem.EffectbaseGHC.IO.Handle.TypesHandle"async-2.2.4-4JG4UQZhHlOKvfwb7nDkNcControl.Concurrent.Async waitBothSTMwaitEitherSTM_ waitEitherSTMwaitEitherCatchSTM waitAnySTMwaitAnyCatchSTMpollSTM waitCatchSTMwaitSTM compareAsyncs asyncThreadIdAsyncAsyncCancelledExceptionInLinkedThreadControl.ConcurrentrtsSupportsBoundThreadsControl.Concurrent.ChanChanControl.Concurrent.QSemQSemControl.Concurrent.QSemNQSemNGHC.IO.Handle.FDstderrstdin GHC.Conc.Sync writeTVarreadTVarnewTVarcatchSTMthrowSTMorElseretrySTMTVarstdoutBlockBuffering LineBuffering NoBuffering BufferMode GHC.IO.Device SeekFromEnd RelativeSeek AbsoluteSeekSeekMode GHC.IO.IOMode ReadWriteMode AppendMode WriteModeReadModeIOModeGHC.MVarMVardirectory-1.3.6.0System.Directory exeExtensionsetOwnerSearchablesetOwnerExecutablesetOwnerWritablesetOwnerReadableemptyPermissions System.Directory.Internal.Common searchable executablewritablereadable PermissionsXdgCache XdgConfigXdgData XdgDirectory XdgConfigDirs XdgDataDirsXdgDirectoryListprocess-1.6.9.0System.ProcessshowCommandForUsershellprocPidSystem.Process.Commonuse_process_jobs child_user child_group new_sessioncreate_new_consoledetach_console delegate_ctlc create_group close_fdsstd_errstd_outstd_inenvcwdcmdspec CreateProcess RawCommand ShellCommandCmdSpecNoStream CreatePipe UseHandleInherit StdStream ProcessHandle stm-2.5.0.0Control.Monad.STMcheckControl.Concurrent.STM.TVarswapTVar modifyTVar' modifyTVarControl.Concurrent.STM.TQueue isEmptyTQueue unGetTQueue tryPeekTQueue peekTQueue flushTQueue tryReadTQueue readTQueue writeTQueue newTQueueTQueueControl.Concurrent.STM.TMVar isEmptyTMVar swapTMVar tryReadTMVar readTMVar tryPutTMVarputTMVar tryTakeTMVar takeTMVar newEmptyTMVarnewTMVarTMVarControl.Concurrent.STM.TChan cloneTChan isEmptyTChan unGetTChandupTChan tryPeekTChan peekTChan tryReadTChan readTChan writeTChannewBroadcastTChannewTChanTChanControl.Concurrent.STM.TBQueue isFullTBQueueisEmptyTBQueue lengthTBQueue unGetTBQueuetryPeekTBQueue peekTBQueue flushTBQueuetryReadTBQueue readTBQueue writeTBQueue newTBQueueTBQueue(unliftio-0.2.22.0-8XX2qytUiYHJDqmPuk7olCUnliftIO.Internals.AsyncEmptyWithNoAlternative ConcException Concurrent runConcurrentnewChan writeChanreadChandupChangetChanContentswriteList2Chan ConcurrentlyrunConcurrentlyConcasync asyncBoundasyncOnasyncWithUnmaskasyncOnWithUnmaskwithAsyncBound withAsyncOnwithAsyncWithUnmaskwithAsyncOnWithUnmaskwaitpollcancel cancelWithuninterruptibleCancel waitCatchwaitAny waitAnyCatch waitAnyCancelwaitAnyCatchCancel waitEitherwaitEitherCatchwaitEitherCancelwaitEitherCatchCancel waitEither_waitBothlinklinkOnlylink2 link2Onlyracerace_ concurrently concurrently_mapConcurrentlymapConcurrently_forConcurrentlyforConcurrently_replicateConcurrentlyreplicateConcurrently_pooledMapConcurrentlyNpooledMapConcurrentlypooledMapConcurrentlyN_pooledMapConcurrently_pooledForConcurrentlyNpooledForConcurrentlypooledForConcurrentlyN_pooledForConcurrently_pooledReplicateConcurrentlyNpooledReplicateConcurrentlypooledReplicateConcurrentlyN_pooledReplicateConcurrently_concrunConc $fMonoidConc$fSemigroupConc$fAlternativeConc$fApplicativeConc$fMonoidConcurrently$fSemigroupConcurrently$fAlternativeConcurrently$fApplicativeConcurrently$fFunctorConcurrently $fFunctorConc myThreadIdforkIO forkFinallyforkIOWithUnmask killThreadthrowToforkOnforkOnWithUnmaskgetNumCapabilitiessetNumCapabilitiesgetNumProcessorsthreadCapabilityyield threadDelaythreadWaitReadthreadWaitWritethreadWaitReadSTMthreadWaitWriteSTMforkOSisCurrentThreadBoundrunInBoundThreadrunInUnboundThreadmkWeakThreadId newEmptyMVarnewMVartakeMVarputMVarreadMVarswapMVar tryTakeMVar tryPutMVar isEmptyMVar tryReadMVarwithMVarwithMVarMasked modifyMVar_ modifyMVarmodifyMVarMasked_modifyMVarMasked mkWeakMVarnewQSemwaitQSem signalQSemnewQSemN waitQSemN signalQSemN atomically newTVarIO readTVarIO registerDelay mkWeakTVar newTMVarIOnewEmptyTMVarIO mkWeakTMVar newTChanIOnewBroadcastTChanIO newTQueueIO newTBQueueIO EnvironmentrunEnvironmentgetArgsgetEnvgetEnvironmentgetExecutablePath getProgName lookupEnvsetEnvunsetEnvwithArgs withProgName FileSystem runFileSystemcreateDirectorycreateDirectoryIfMissingremoveDirectoryremoveDirectoryRecursiveremovePathForciblyrenameDirectory listDirectorygetDirectoryContentsgetCurrentDirectorysetCurrentDirectorywithCurrentDirectorygetHomeDirectorygetXdgDirectorygetXdgDirectoryListgetAppUserDataDirectorygetUserDocumentsDirectorygetTemporaryDirectory removeFile renameFile renamePathcopyFilecopyFileWithMetadata getFileSizecanonicalizePath makeAbsolutemakeRelativeToCurrentDirectory doesPathExist doesFileExistdoesDirectoryExistfindExecutablefindExecutablesfindExecutablesInDirectoriesfindFile findFiles findFileWith findFilesWithcreateFileLinkcreateDirectoryLinkremoveDirectoryLinkpathIsSymbolicLinkgetSymbolicLinkTargetgetPermissionssetPermissionscopyPermissions getAccessTimegetModificationTime setAccessTimesetModificationTimewithFilewithBinaryFileopenFilehClosehFlush hFileSize hSetFileSizehIsEOF hSetBuffering hGetBufferinghSeekhTellhIsOpen hIsClosed hIsReadable hIsWritable hIsSeekablehIsTerminalDevicehSetEchohGetEcho hWaitForInputhReadywriteBinaryFilewriteBinaryFileAtomicwriteBinaryFileDurablewriteBinaryFileDurableAtomicwithBinaryFileAtomicwithBinaryFileDurablewithBinaryFileDurableAtomicensureFileDurableProcess runProcess createProcesscreateProcess_ callProcess callCommand spawnProcess spawnCommandreadCreateProcess readProcessreadCreateProcessWithExitCodereadProcessWithExitCodewithCreateProcesscleanupProcessgetPidwaitForProcessgetProcessExitCodeterminateProcessinterruptProcessGroupOf createPipe createPipeFd Temporary runTemporarywithSystemTempFilewithSystemTempDirectory withTempFilewithTempDirectoryTimeout runTimeouttimeout-effectful-core-1.2.0.0-Ag0kJ5PsTC1BiOpulhLp2mEffectful.Internal.MonadEff GHC.Conc.IOControl.Concurrent.MVarSystem.Environment!System.Environment.ExecutablePath System.IO GHC.IO.HandleGHC.IO.Handle.TextUnliftIO.IO.File UnliftIO.IOSystem.Process.InternalsUnliftIO.Temporary openTempFileSystem.Timeout