diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-07-14 06:16:04 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-07-14 06:16:04 +0200 |
commit | e4314c03faa77d71ad69ec37b83e2634e1a2a9c9 (patch) | |
tree | 8978ab9aca61cc8160156404168322113a24dadd /lib/Phi/Phi.hs | |
parent | d519f6781677aae2217aa895b25cbff61e1d0dbb (diff) | |
download | phi-e4314c03faa77d71ad69ec37b83e2634e1a2a9c9.tar phi-e4314c03faa77d71ad69ec37b83e2634e1a2a9c9.zip |
Some more restructuring, WIP
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 |