diff options
Diffstat (limited to 'lib/Phi/Phi.hs')
-rw-r--r-- | lib/Phi/Phi.hs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/Phi/Phi.hs b/lib/Phi/Phi.hs index b517de6..3f4b59b 100644 --- a/lib/Phi/Phi.hs +++ b/lib/Phi/Phi.hs @@ -12,6 +12,8 @@ module Phi.Phi ( Phi import Control.Concurrent.Chan import Control.Monad +import Control.Monad.IO.Class + import Data.Typeable data Phi = Phi (Chan Message) @@ -24,14 +26,14 @@ data DefaultMessage = Repaint deriving (Typeable, Show) fromMessage :: (Typeable a, Show a) => Message -> Maybe a fromMessage (Message m) = cast m -initPhi :: IO Phi -initPhi = liftM Phi newChan +initPhi :: MonadIO m => m Phi +initPhi = liftM Phi $ liftIO newChan -dupPhi :: Phi -> IO Phi -dupPhi (Phi chan) = liftM Phi $ dupChan chan +dupPhi :: MonadIO m => Phi -> m Phi +dupPhi (Phi chan) = liftM Phi $ liftIO $ dupChan chan -sendMessage :: (Typeable a, Show a) => Phi -> a -> IO () -sendMessage (Phi chan) = writeChan chan . Message +sendMessage :: (MonadIO m, Typeable a, Show a) => Phi -> a -> m () +sendMessage (Phi chan) = liftIO . writeChan chan . Message -receiveMessage :: Phi -> IO Message -receiveMessage (Phi chan) = readChan chan +receiveMessage :: MonadIO m => Phi -> m Message +receiveMessage (Phi chan) = liftIO $ readChan chan |