h*[I      !"#$%&'()*+,-./ 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{|}~                                                                                                    2.3.1.0 Safe-Inferred%&)*/169<m 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. Safe-Inferred%&)*/169< effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . - - Safe-Inferred%&)*/169<98 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 .       Safe-Inferred%&)*/169< effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted ... Safe-Inferred%&)*/169<! effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .  Safe-Inferred%&)*/169<%~ 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 . Safe-Inferred%&)*/169<& effectfulLifted . effectfulLifted . effectfulLifted .,, Safe-Inferred%&)*/169<'N effectfulLifted . effectfulLifted . effectfulLifted .++ Safe-Inferred%&)*/169<)C  effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .!"#$%&'(xyz{}|~lmntwpqrsouv`acdfgebhijk!"#$%&'(xyz{}|~lmntwpqrsouv`acdfgebhijk Safe-Inferred%&)*/169<* effectful&An effect for reading from/writing to ,   or !. effectfulRun the  effect.  Safe-Inferred%&)*/169<+ effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .  Safe-Inferred%&)*/169<, effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . Safe-Inferred%&)*/169</  effectful?@23456/01A7<89:;=>?@ Safe-Inferred%&)*/169<:@ effectfulLifted . effectfulLifted . effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted  effectfulLifted )) *)) * Safe-Inferred%&)*/169<< effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . Safe-Inferred%&)*/169<= effectfulLifted #$. effectfulLifted #%. Safe-Inferred%&)*/169<?Y  effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .   Safe-Inferred%&)*/169<@  effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted . effectfulLifted .    Safe-Inferred%&)*/169<Da 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 . effectfulLifted .4^]KLMNOPQRSTUVWXYZ[HIJCDEFGB_\4^]KLMNOPQRSTUVWXYZ[HIJCDEFGB_\ Safe-Inferred%&)*/169<H> 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. Safe-Inferred%&)*/169<I 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.&'()*+)*+)*,)*,)*-)*.)*/)*0)*1)*2)*3)*4)*5)*6)*7)*8&9:&;<&=>&=?&=@&=A&=B&CD&CE&CF&CG&'H&'I&'J&'K&L &;M&;N&;O&;P&;Q&;R&;S&;T&L&L!&UV&WX&YZ&[\]^_]^`]^a]^b]^c]^d]^e]^f]^g]^h]^i]^j]^k]lm]ln]lo]lp]lq]lrstustvstwstxstystzst{st|st}st~st~stststststststststststststststssss                          ""                                                %$%%                      &Y&Y&Y&Y&Y&Y)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*&;&;&[&;&;&;&;&;&;&;&;&;&;&&[&[&[&[&[&[&[&[&;&9&9&9&9&9&&9&9&9&9&&&&&&&&W&W&W&U&U&U&;&;&;&&&&&&&&&&&]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l]l&L&L&L&&&&&&&&&&&&&&&&&&&%%ssssssssssssssssssss&&(effectful-2.3.1.0-8in3M7snar92oivHdL8cJuEffectful.FileSystem.IOEffectful.Concurrent.AsyncEffectful.Concurrent.MVarEffectful.Concurrent.STMEffectful.Concurrent.QSemNEffectful.Concurrent.QSemEffectful.Concurrent.ChanEffectful.ConcurrentEffectful.FileSystemEffectful.Process Effectful.Concurrent.MVar.Strict!Effectful.Console.ByteString.LazyEffectful.Console.ByteStringEffectful.Environment"Effectful.FileSystem.IO.ByteString*Effectful.FileSystem.IO.ByteString.Builder'Effectful.FileSystem.IO.ByteString.LazyEffectful.FileSystem.IO.FileEffectful.TemporaryEffectful.Timeout effectfulEffectful.Concurrent.Effect withAsyncEffectful.Reader.StaticlocalReaderEforkOSWithUnmaskEffectful.Console.Effect System.IOstdinstdoutstderrEffectful.FileSystem.Effect BS.Builder hPutBuilder writeFilebaseGHC.IO.Handle.TypesHandle"async-2.2.5-12So8cClabA8mefKQ1wL7P!Control.Concurrent.Async.InternalExceptionInLinkedThreadAsyncCancelledAsync asyncThreadId compareAsyncswaitSTM waitCatchSTMpollSTMwaitAnyCatchSTM waitAnySTMwaitEitherCatchSTM waitEitherSTMwaitEitherSTM_ waitBothSTMGHC.MVarMVar GHC.Conc.SyncTVar GHC.IO.IOModeIOModeReadMode WriteMode AppendMode ReadWriteMode GHC.IO.DeviceSeekMode AbsoluteSeek RelativeSeek SeekFromEnd BufferMode NoBuffering LineBufferingBlockBufferingGHC.IO.StdHandlesSTMretryorElsethrowSTMcatchSTMnewTVarreadTVar writeTVarControl.Concurrent.QSemNQSemNControl.Concurrent.QSemQSemControl.Concurrent.ChanChanControl.ConcurrentrtsSupportsBoundThreadsdirectory-1.3.8.1 System.Directory.Internal.CommonXdgDirectoryList XdgDataDirs XdgConfigDirs XdgDirectoryXdgData XdgConfigXdgCacheXdgState Permissionsreadablewritable executable searchableSystem.DirectoryemptyPermissionssetOwnerReadablesetOwnerWritablesetOwnerExecutablesetOwnerSearchable exeExtensionprocess-1.6.17.0System.Process.Common ProcessHandle StdStreamInherit UseHandle CreatePipeNoStreamCmdSpec ShellCommand RawCommand CreateProcesscmdspeccwdenvstd_instd_outstd_err close_fds create_group delegate_ctlcdetach_consolecreate_new_console new_session child_group child_useruse_process_jobsSystem.ProcessPidprocshellshowCommandForUser stm-2.5.1.0Control.Concurrent.STM.TBQueueTBQueue newTBQueue writeTBQueue readTBQueuetryReadTBQueue flushTBQueue peekTBQueuetryPeekTBQueue unGetTBQueue lengthTBQueueisEmptyTBQueue isFullTBQueueControl.Concurrent.STM.TChanTChannewTChannewBroadcastTChan writeTChan readTChan tryReadTChan peekTChan tryPeekTChandupTChan unGetTChan isEmptyTChan cloneTChanControl.Concurrent.STM.TMVarTMVarnewTMVar newEmptyTMVar takeTMVar tryTakeTMVarputTMVar tryPutTMVar readTMVar tryReadTMVar swapTMVar isEmptyTMVarControl.Concurrent.STM.TQueueTQueue newTQueue writeTQueue readTQueue tryReadTQueue flushTQueue peekTQueue tryPeekTQueue unGetTQueue isEmptyTQueueControl.Concurrent.STM.TVar modifyTVar modifyTVar'swapTVarControl.Monad.STMcheck(unliftio-0.2.25.0-K2Csgyt15uoJbRwEHfwrF5UnliftIO.Internals.Async ConcExceptionEmptyWithNoAlternative 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 newTBQueueIOConsole runConsole getContentsputStrputStrLninteractgetLine 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 hWaitForInputhReady fromFilePath toFilePathreadFile appendFilehGetLine hGetContentshGethGetSomehGetNonBlockinghPuthPutNonBlockinghPutStr hPutStrLnwriteBinaryFilewriteBinaryFileAtomicwriteBinaryFileDurablewriteBinaryFileDurableAtomicwithBinaryFileAtomicwithBinaryFileDurablewithBinaryFileDurableAtomicensureFileDurableProcess runProcess createProcesscreateProcess_ callProcess callCommand spawnProcess spawnCommandreadCreateProcess readProcessreadCreateProcessWithExitCodereadProcessWithExitCodewithCreateProcesscleanupProcessgetPid getCurrentPidwaitForProcessgetProcessExitCodeterminateProcessinterruptProcessGroupOf createPipe createPipeFd Temporary runTemporarywithSystemTempFilewithSystemTempDirectory withTempFilewithTempDirectoryTimeout runTimeouttimeout-effectful-core-2.3.1.0-EGxNgHuMuzT2IPf2MGZbuoEffectful.Internal.MonadEff GHC.Conc.IOControl.Concurrent.MVarbytestring-0.11.5.2Data.ByteString.LazyData.ByteString.Lazy.Char8Data.ByteStringData.ByteString.Char8System.Environment!System.Environment.ExecutablePath GHC.IO.HandleGHC.IO.Handle.TextUnliftIO.IO.File UnliftIO.IOSystem.Process.InternalsUnliftIO.Temporary openTempFileSystem.Timeout