module Foreign.Erlang.Mailbox
( Mailbox(..)
, deliverLink
, deliverSend
, deliverExit
, deliverUnlink
, deliverRegSend
, deliverGroupLeader
, deliverExit2
, receive
) where
import Foreign.Erlang.Term
import Control.Concurrent.STM
data Mailbox = MkMailbox { self :: Pid
, msgQueue :: TQueue Term
}
deliverLink :: Mailbox -> Pid -> IO ()
deliverLink = undefined
deliverSend :: Mailbox -> Term -> IO ()
deliverSend MkMailbox{msgQueue} =
atomically . writeTQueue msgQueue
deliverExit :: Mailbox -> Pid -> Term -> IO ()
deliverExit =
undefined
deliverUnlink :: Mailbox -> Pid -> IO ()
deliverUnlink =
undefined
deliverRegSend :: Mailbox -> Pid -> Term -> IO ()
deliverRegSend MkMailbox{msgQueue} _fromPid message =
atomically $ writeTQueue msgQueue message
deliverGroupLeader :: Mailbox -> Pid -> IO ()
deliverGroupLeader =
undefined
deliverExit2 :: Mailbox -> Pid -> Term -> IO ()
deliverExit2 =
undefined
receive :: Mailbox -> IO Term
receive MkMailbox{msgQueue} =
atomically (readTQueue msgQueue)