module Main where
import Control.Eff
import Control.Eff.Concurrent
import Data.Dynamic
import Control.DeepSeq
import GHC.Stack (HasCallStack)
main :: IO ()
main =
defaultMainWithLogWriter
(defaultIoLogWriter "example-4" local0 consoleLogWriter)
firstExample
newtype WhoAreYou = WhoAreYou ProcessId deriving (Typeable, NFData, Show)
firstExample :: (HasCallStack, Member Logs q) => Eff (InterruptableProcess q) ()
firstExample = do
person <- spawn
(do
logInfo "I am waiting for someone to ask me..."
WhoAreYou replyPid <- receiveMessage
sendMessage replyPid ("Alice" :: String)
logInfo' (show replyPid ++ " just needed to know it.")
)
me <- self
sendMessage person (WhoAreYou me)
personName <- receiveMessage
logInfo' ("I just met " ++ personName)