diff options
Diffstat (limited to 'lib/Phi/Phi.hs')
-rw-r--r-- | lib/Phi/Phi.hs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/Phi/Phi.hs b/lib/Phi/Phi.hs new file mode 100644 index 0000000..9df36f3 --- /dev/null +++ b/lib/Phi/Phi.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE ExistentialQuantification #-} + +module Phi.Phi ( Phi + , MessageBus + , Message(..) + , initPhi + , runPhi + , sendMessage + , getMessageBus + , receiveMessage + ) where + +import Control.Concurrent.Chan +import Control.Monad + +data Phi = Phi (Chan Message) +data MessageBus = MessageBus (Chan Message) + +data Message = forall a. Show a => Message a + +initPhi :: IO Phi +initPhi = liftM Phi newChan + +runPhi :: Phi -> IO () +runPhi (Phi chan) = forever $ readChan chan + +sendMessage :: Phi -> Message -> IO () +sendMessage (Phi chan) = writeChan chan + +getMessageBus :: Phi -> IO MessageBus +getMessageBus (Phi chan) = liftM MessageBus $ dupChan chan + +receiveMessage :: MessageBus -> IO Message +receiveMessage (MessageBus chan) = readChan chan |