@hackage extensible-effects-concurrent0.19.0
Message passing concurrency as extensible-effect
Categories
License
BSD-3-Clause
Maintainer
sven.heyll@gmail.com
Links
Versions
Installation
Tested Compilers
Dependencies (20)
- QuickCheck
- async >=2.2 && <3
- base >=4.12 && <5
- containers >=0.5.8 && <0.7
- data-default >=0.7 && <0.8
- deepseq >=1.4 && <1.5 Show all…
Dependents (0)
extensible-effects-concurrent
Message passing concurrency with 'forkIO' and 'extensible-effects' inspired by Erlang.
Also included:
-
Logging
-
Memory Leak Free
forever
GHC Extensions
In order to use the library you might need to activate some extension in order to fight some ambiguous types, stemming from the flexibility to choose different Scheduler implementations.
- AllowAmbiguousTypes
- TypeApplications
Example
module Main where
import Control.Eff
import Control.Eff.Lift
import Control.Eff.Concurrent
import Data.Dynamic
import Control.Concurrent
import Control.DeepSeq
main :: IO ()
main = defaultMain
(do
lift (threadDelay 100000) -- because of async logging
firstExample
lift (threadDelay 100000) -- ... async logging
)
newtype WhoAreYou = WhoAreYou ProcessId deriving (Typeable, NFData, Show)
firstExample
:: (HasLogging IO q) => Eff (InterruptableProcess q) ()
firstExample = do
person <- spawn
(do
logInfo "I am waiting for someone to ask me..."
WhoAreYou replyPid <- receiveMessage
sendMessage replyPid "Alice"
logInfo (show replyPid ++ " just needed to know it.")
)
me <- self
sendMessage person (WhoAreYou me)
personName <- receiveMessage
logInfo ("I just met " ++ personName)
Running this example causes this output: (not entirely true because of async logging, but true enough)
2018-11-05T10:50:42 DEBUG scheduler loop entered ForkIOScheduler.hs line 131
2018-11-05T10:50:42 DEBUG !1 [ThreadId 11] enter process ForkIOScheduler.hs line 437
2018-11-05T10:50:42 NOTICE !1 [ThreadId 11] ++++++++ main process started ++++++++ ForkIOScheduler.hs line 394
2018-11-05T10:50:42 DEBUG !2 [ThreadId 12] enter process ForkIOScheduler.hs line 437
2018-11-05T10:50:42 INFO !2 [ThreadId 12] I am waiting for someone to ask me... Main.hs line 27
2018-11-05T10:50:42 INFO !2 [ThreadId 12] !1 just needed to know it. Main.hs line 30
2018-11-05T10:50:42 DEBUG !2 [ThreadId 12] returned ForkIOScheduler.hs line 440
2018-11-05T10:50:42 INFO !1 [ThreadId 11] I just met Alice Main.hs line 35
2018-11-05T10:50:42 NOTICE !1 [ThreadId 11] ++++++++ main process returned ++++++++ ForkIOScheduler.hs line 396
2018-11-05T10:50:42 DEBUG !1 [ThreadId 11] returned ForkIOScheduler.hs line 440
2018-11-05T10:50:42 DEBUG scheduler loop returned ForkIOScheduler.hs line 133
2018-11-05T10:50:42 DEBUG scheduler cleanup begin ForkIOScheduler.hs line 137
2018-11-05T10:50:42 NOTICE cancelling processes: [] ForkIOScheduler.hs line 149
2018-11-05T10:50:42 DEBUG scheduler cleanup done ForkIOScheduler.hs line 141
TODO
Stackage
Still todo...
Other
-
Process Linking/Monitoring
-
Scheduler
ekgMonitoring -
Timers and Timeouts (e.g. in
receive) -
Rename stuff