diff options
Diffstat (limited to 'lib/Phi/Phi.hs')
-rw-r--r-- | lib/Phi/Phi.hs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/Phi/Phi.hs b/lib/Phi/Phi.hs index 9df36f3..5d14181 100644 --- a/lib/Phi/Phi.hs +++ b/lib/Phi/Phi.hs @@ -2,7 +2,8 @@ module Phi.Phi ( Phi , MessageBus - , Message(..) + , Message + , fromMessage , initPhi , runPhi , sendMessage @@ -12,11 +13,15 @@ module Phi.Phi ( Phi import Control.Concurrent.Chan import Control.Monad +import Data.Typeable data Phi = Phi (Chan Message) data MessageBus = MessageBus (Chan Message) -data Message = forall a. Show a => Message a +data Message = forall a. (Typeable a, Show a) => Message a + +fromMessage :: (Typeable a, Show a) => Message -> Maybe a +fromMessage (Message m) = cast m initPhi :: IO Phi initPhi = liftM Phi newChan @@ -24,8 +29,8 @@ initPhi = liftM Phi newChan runPhi :: Phi -> IO () runPhi (Phi chan) = forever $ readChan chan -sendMessage :: Phi -> Message -> IO () -sendMessage (Phi chan) = writeChan chan +sendMessage :: (Typeable a, Show a) => Phi -> a -> IO () +sendMessage (Phi chan) = writeChan chan . Message getMessageBus :: Phi -> IO MessageBus getMessageBus (Phi chan) = liftM MessageBus $ dupChan chan |