-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Monad Transformer for Asyncronous Message Passing
--   
--   Please see the README on Github at
--   <a>https://github.com/System-Indystress/Butter#readme</a>
@package butter
@version 0.1.0.6

module Distrib.Butter.Lang
data ProcessID
PID :: Text -> Int -> ProcessID
[machineID] :: ProcessID -> Text
[processID] :: ProcessID -> Int
Named :: Text -> Text -> ProcessID
[hostname] :: ProcessID -> Text
[processName] :: ProcessID -> Text
to :: Text -> Text -> ProcessID
data Action (m :: * -> *) next
[Lift] :: m a -> (a -> next) -> Action m next
[Connect] :: Text -> Text -> Int -> next -> Action m next
[Spawn] :: Butter m () -> (ProcessID -> next) -> Action m next
[Send] :: ProcessID -> ByteString -> next -> Action m next
[Receive] :: (ByteString -> next) -> Action m next
[Friends] :: ([Text] -> next) -> Action m next
[Self] :: (ProcessID -> next) -> Action m next
[Alive] :: ProcessID -> (Bool -> next) -> Action m next
[Name] :: Text -> next -> Action m next
data Internal
Internal :: Text -> [Int] -> Map Text Int -> Int -> Map Text Socket -> Seq (ProcessID, ProcessID, ByteString) -> Internal
[machine] :: Internal -> Text
[procs] :: Internal -> [Int]
[names] :: Internal -> Map Text Int
[fresh] :: Internal -> Int
[friends] :: Internal -> Map Text Socket
[mail] :: Internal -> Seq (ProcessID, ProcessID, ByteString)
type Butter m a = Free (Action m) a
connect :: Text -> Text -> Int -> Butter m ()
spawn :: Butter m () -> Butter m ProcessID
self :: Butter m ProcessID
name :: Text -> Butter m ()
send :: ToJSON a => ProcessID -> a -> Butter m ()
receive :: (MonadIO m, FromJSON a) => Butter m a
lift :: m a -> Butter m a
alive :: ProcessID -> Butter m Bool
spreadLocal :: (MonadIO m, ForkableMonad m, ToJSON a, FromJSON a) => Butter m a -> m a
spread :: (MonadIO m, ForkableMonad m, ToJSON a, FromJSON a) => Text -> Maybe Int -> Butter m a -> m a
instance GHC.Generics.Generic Distrib.Butter.Lang.ProcessID
instance GHC.Classes.Eq Distrib.Butter.Lang.ProcessID
instance GHC.Show.Show Distrib.Butter.Lang.ProcessID
instance GHC.Base.Functor (Distrib.Butter.Lang.Action m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Free.Free (Distrib.Butter.Lang.Action m))
instance Data.Aeson.Types.ToJSON.ToJSON Distrib.Butter.Lang.ProcessID
instance Data.Aeson.Types.FromJSON.FromJSON Distrib.Butter.Lang.ProcessID

module Distrib.Butter.Lib.K
class (Monad m) => SerialM m
toV :: SerialM m => m a -> Value
fromV :: SerialM m => Value -> m a
sendB :: (SerialM m, ToJSON a) => ProcessID -> Butter m a -> Butter m ()
receiveB :: (SerialM m, FromJSON a) => Butter m (Butter m a)

module Distrib.Butter.Lib.Protocol
data Result p
Reply :: p -> State p -> Result p
NoReply :: State p -> Result p
Terminate :: Result p
Restart :: Result p
class (ToJSON p, FromJSON p) => Protocol p where {
    data family State p;
    type family Context p :: * -> *;
}
setup :: (Protocol p, MonadIO (Context p), ForkableMonad (Context p)) => p -> Butter (Context p) (State p)
handle :: (Protocol p, MonadIO (Context p), ForkableMonad (Context p)) => p -> State p -> Butter (Context p) (Result p)
start :: (MonadIO (Context p), ForkableMonad (Context p), Protocol p) => p -> Butter (Context p) ProcessID
call :: (MonadIO (Context p), ForkableMonad (Context p), Protocol p) => ProcessID -> p -> Butter (Context p) p
cast :: (MonadIO (Context p), ForkableMonad (Context p), Protocol p) => ProcessID -> p -> Butter (Context p) ()

module Distrib.Butter.Lib

module Distrib.Butter
