summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Phi.hs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-07-14 06:16:04 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-07-14 06:16:04 +0200
commite4314c03faa77d71ad69ec37b83e2634e1a2a9c9 (patch)
tree8978ab9aca61cc8160156404168322113a24dadd /lib/Phi/Phi.hs
parentd519f6781677aae2217aa895b25cbff61e1d0dbb (diff)
downloadphi-e4314c03faa77d71ad69ec37b83e2634e1a2a9c9.tar
phi-e4314c03faa77d71ad69ec37b83e2634e1a2a9c9.zip
Some more restructuring, WIP
Diffstat (limited to 'lib/Phi/Phi.hs')
-rw-r--r--lib/Phi/Phi.hs34
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