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


-- | Simple streaming RPC mechanism using WebSockets
--   
--   Simple streaming RPC mechanism using WebSockets
@package websockets-rpc
@version 0.6.0

module Network.WebSockets.RPC.Types

-- | Unique identifier for an RPC session
data RPCID
getRPCID :: RPCID -> Int
data RPCIdentified a
RPCIdentified :: {-# UNPACK #-} !RPCID -> !a -> RPCIdentified a
[_ident] :: RPCIdentified a -> {-# UNPACK #-} !RPCID
[_params] :: RPCIdentified a -> !a
newtype Subscribe a
Subscribe :: RPCIdentified a -> Subscribe a

-- | <tt>Nothing</tt> means the RPC is canceled
newtype Supply a
Supply :: RPCIdentified (Maybe a) -> Supply a
[getSupply] :: Supply a -> RPCIdentified (Maybe a)
newtype Reply a
Reply :: RPCIdentified a -> Reply a
newtype Complete a
Complete :: RPCIdentified a -> Complete a
data ClientToServer sub sup
Sub :: (Subscribe sub) -> ClientToServer sub sup
Sup :: (Supply sup) -> ClientToServer sub sup
Ping :: ClientToServer sub sup
data ServerToClient rep com
Rep :: (Reply rep) -> ServerToClient rep com
Com :: (Complete com) -> ServerToClient rep com
Pong :: ServerToClient rep com
data WebSocketRPCException
WebSocketRPCParseFailure :: [String] -> ByteString -> WebSocketRPCException
instance GHC.Generics.Generic Network.WebSockets.RPC.Types.WebSocketRPCException
instance GHC.Show.Show Network.WebSockets.RPC.Types.WebSocketRPCException
instance (Data.Data.Data com, Data.Data.Data rep) => Data.Data.Data (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance (GHC.Classes.Eq com, GHC.Classes.Eq rep) => GHC.Classes.Eq (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance (GHC.Read.Read com, GHC.Read.Read rep) => GHC.Read.Read (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance (GHC.Show.Show com, GHC.Show.Show rep) => GHC.Show.Show (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance (Data.Data.Data sup, Data.Data.Data sub) => Data.Data.Data (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance (GHC.Classes.Eq sup, GHC.Classes.Eq sub) => GHC.Classes.Eq (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance (GHC.Read.Read sup, GHC.Read.Read sub) => GHC.Read.Read (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance (GHC.Show.Show sup, GHC.Show.Show sub) => GHC.Show.Show (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.Complete a)
instance Data.Data.Data a => Data.Data.Data (Network.WebSockets.RPC.Types.Complete a)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.Complete a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.WebSockets.RPC.Types.Complete a)
instance GHC.Read.Read a => GHC.Read.Read (Network.WebSockets.RPC.Types.Complete a)
instance GHC.Show.Show a => GHC.Show.Show (Network.WebSockets.RPC.Types.Complete a)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.Reply a)
instance Data.Data.Data a => Data.Data.Data (Network.WebSockets.RPC.Types.Reply a)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.Reply a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.WebSockets.RPC.Types.Reply a)
instance GHC.Read.Read a => GHC.Read.Read (Network.WebSockets.RPC.Types.Reply a)
instance GHC.Show.Show a => GHC.Show.Show (Network.WebSockets.RPC.Types.Reply a)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.Supply a)
instance Data.Data.Data a => Data.Data.Data (Network.WebSockets.RPC.Types.Supply a)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.Supply a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.WebSockets.RPC.Types.Supply a)
instance GHC.Read.Read a => GHC.Read.Read (Network.WebSockets.RPC.Types.Supply a)
instance GHC.Show.Show a => GHC.Show.Show (Network.WebSockets.RPC.Types.Supply a)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.Subscribe a)
instance Data.Data.Data a => Data.Data.Data (Network.WebSockets.RPC.Types.Subscribe a)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.Subscribe a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.WebSockets.RPC.Types.Subscribe a)
instance GHC.Read.Read a => GHC.Read.Read (Network.WebSockets.RPC.Types.Subscribe a)
instance GHC.Show.Show a => GHC.Show.Show (Network.WebSockets.RPC.Types.Subscribe a)
instance Data.Data.Data a => Data.Data.Data (Network.WebSockets.RPC.Types.RPCIdentified a)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Types.RPCIdentified a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Network.WebSockets.RPC.Types.RPCIdentified a)
instance GHC.Read.Read a => GHC.Read.Read (Network.WebSockets.RPC.Types.RPCIdentified a)
instance GHC.Show.Show a => GHC.Show.Show (Network.WebSockets.RPC.Types.RPCIdentified a)
instance Test.QuickCheck.Arbitrary.CoArbitrary Network.WebSockets.RPC.Types.RPCID
instance Test.QuickCheck.Arbitrary.Arbitrary Network.WebSockets.RPC.Types.RPCID
instance Data.Aeson.Types.ToJSON.ToJSON Network.WebSockets.RPC.Types.RPCID
instance Data.Aeson.Types.FromJSON.FromJSON Network.WebSockets.RPC.Types.RPCID
instance Data.Data.Data Network.WebSockets.RPC.Types.RPCID
instance GHC.Generics.Generic Network.WebSockets.RPC.Types.RPCID
instance GHC.Enum.Bounded Network.WebSockets.RPC.Types.RPCID
instance GHC.Enum.Enum Network.WebSockets.RPC.Types.RPCID
instance GHC.Classes.Ord Network.WebSockets.RPC.Types.RPCID
instance GHC.Classes.Eq Network.WebSockets.RPC.Types.RPCID
instance GHC.Num.Num Network.WebSockets.RPC.Types.RPCID
instance GHC.Read.Read Network.WebSockets.RPC.Types.RPCID
instance GHC.Show.Show Network.WebSockets.RPC.Types.RPCID
instance GHC.Exception.Exception Network.WebSockets.RPC.Types.WebSocketRPCException
instance (Test.QuickCheck.Arbitrary.Arbitrary sub, Test.QuickCheck.Arbitrary.Arbitrary sup) => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.ServerToClient sub sup)
instance (Data.Aeson.Types.ToJSON.ToJSON rep, Data.Aeson.Types.ToJSON.ToJSON com) => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance (Data.Aeson.Types.FromJSON.FromJSON rep, Data.Aeson.Types.FromJSON.FromJSON com) => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.ServerToClient rep com)
instance (Test.QuickCheck.Arbitrary.Arbitrary sub, Test.QuickCheck.Arbitrary.Arbitrary sup) => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance (Data.Aeson.Types.ToJSON.ToJSON sub, Data.Aeson.Types.ToJSON.ToJSON sup) => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance (Data.Aeson.Types.FromJSON.FromJSON sub, Data.Aeson.Types.FromJSON.FromJSON sup) => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.ClientToServer sub sup)
instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.Complete a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.Complete a)
instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.Reply a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.Reply a)
instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.Supply a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.Supply a)
instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.Subscribe a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.Subscribe a)
instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.Types.RPCIdentified a)
instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.Types.RPCIdentified a)
instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Network.WebSockets.RPC.Types.RPCIdentified a)

module Network.WebSockets.RPC.Trans.Server
data WebSocketServerRPCT sub sup m a
runWebSocketServerRPCT' :: Env sub sup m -> WebSocketServerRPCT sub sup m a -> m a
getServerEnv :: Applicative m => WebSocketServerRPCT sub sup m (Env sub sup m)
execWebSocketServerRPCT :: MonadIO m => WebSocketServerRPCT sub sup m a -> m a
registerSubscribeSupply :: MonadIO m => RPCID -> (Either sub sup -> m ()) -> WebSocketServerRPCT sub sup m ()
unregisterSubscribeSupply :: MonadIO m => RPCID -> WebSocketServerRPCT sub sup m ()
runSubscribeSupply :: MonadIO m => RPCID -> Either sub sup -> WebSocketServerRPCT sub sup m ()
data Env sub sup m
newEnv :: IO (Env sub sup m)
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance GHC.Base.Monad m => GHC.Base.Monad (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance GHC.Base.Functor m => GHC.Base.Functor (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m a)
instance Control.Monad.Trans.Class.MonadTrans (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Network.WebSockets.RPC.Trans.Server.WebSocketServerRPCT sub sup m)

module Network.WebSockets.RPC.Trans.Client
data WebSocketClientRPCT rep com m a
runWebSocketClientRPCT' :: Env rep com m -> WebSocketClientRPCT rep com m a -> m a
getClientEnv :: Applicative m => WebSocketClientRPCT rep com m (Env rep com m)
execWebSocketClientRPCT :: MonadIO m => WebSocketClientRPCT rep com m a -> m a
freshRPCID :: MonadIO m => WebSocketClientRPCT rep com m RPCID
registerReplyComplete :: MonadIO m => RPCID -> (rep -> m ()) -> (com -> m ()) -> WebSocketClientRPCT rep com m ()
unregisterReplyComplete :: MonadIO m => RPCID -> WebSocketClientRPCT rep com m ()
runReply :: MonadIO m => RPCID -> rep -> WebSocketClientRPCT rep com m ()
runComplete :: MonadIO m => RPCID -> com -> WebSocketClientRPCT rep com m ()
newEnv :: IO (Env rep com m)
data Env rep com m
instance Control.Monad.Catch.MonadMask m => Control.Monad.Catch.MonadMask (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance GHC.Base.Monad m => GHC.Base.Monad (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance GHC.Base.Applicative m => GHC.Base.Applicative (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance GHC.Base.Functor m => GHC.Base.Functor (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m a)
instance GHC.Generics.Generic (Network.WebSockets.RPC.Trans.Client.Conts rep com m)
instance Control.Monad.Trans.Class.MonadTrans (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Network.WebSockets.RPC.Trans.Client.WebSocketClientRPCT rep com m)

module Network.WebSockets.RPC
data RPCServerParams rep com m
RPCServerParams :: (rep -> m ()) -> (com -> m ()) -> RPCServerParams rep com m

-- | dispatch a reply
[reply] :: RPCServerParams rep com m -> rep -> m ()

-- | dispatch a onComplete
[complete] :: RPCServerParams rep com m -> com -> m ()
type RPCServer sub sup rep com m = RPCServerParams rep com m -> Either sub sup  handle incoming message -> m ()

-- | May throw a <a>WebSocketRPCParseFailure</a> if the opposing party
--   sends bad data
rpcServer :: forall sub sup rep com m. (ToJSON rep, ToJSON com, FromJSON sub, FromJSON sup, MonadIO m, MonadThrow m, MonadBaseControl IO m) => RPCServer sub sup rep com m -> ServerAppT (WebSocketServerRPCT sub sup m)
data RPCClientParams sup m
RPCClientParams :: (sup -> m ()) -> m () -> RPCClientParams sup m

-- | dispatch a supply
[supply] :: RPCClientParams sup m -> sup -> m ()

-- | cancel the RPC call
[cancel] :: RPCClientParams sup m -> m ()
data RPCClient sub sup rep com m
RPCClient :: !sub -> (RPCClientParams sup m -> m ()) -> (RPCClientParams sup m -> rep -> m ()) -> (com -> m ()) -> RPCClient sub sup rep com m
[subscription] :: RPCClient sub sup rep com m -> !sub
[onSubscribe] :: RPCClient sub sup rep com m -> RPCClientParams sup m -> m ()

-- | handle incoming reply
[onReply] :: RPCClient sub sup rep com m -> RPCClientParams sup m -> rep -> m ()

-- | handle finalized onComplete
[onComplete] :: RPCClient sub sup rep com m -> com -> m ()

-- | May throw a <a>WebSocketRPCParseFailure</a> if the opposing party
--   sends bad data
rpcClient :: forall sub sup rep com m. (ToJSON sub, ToJSON sup, FromJSON rep, FromJSON com, MonadIO m, MonadThrow m, MonadCatch m) => ((RPCClient sub sup rep com m -> WebSocketClientRPCT rep com m ()) -> WebSocketClientRPCT rep com m ()) -> ClientAppT (WebSocketClientRPCT rep com m) ()
data WebSocketServerRPCT sub sup m a
execWebSocketServerRPCT :: MonadIO m => WebSocketServerRPCT sub sup m a -> m a
data WebSocketClientRPCT rep com m a
execWebSocketClientRPCT :: MonadIO m => WebSocketClientRPCT rep com m a -> m a
data WebSocketRPCException
WebSocketRPCParseFailure :: [String] -> ByteString -> WebSocketRPCException
runClientAppTBackingOff :: (forall a. m a -> IO a) -> String -> Int -> String -> ClientAppT m () -> IO ()

-- | Note that this does not ping-pong.
rpcServerSimple :: forall sub sup rep com m. (MonadBaseControl IO m, MonadIO m) => (Maybe (Word16, ByteString) -> m ()) -> RPCServer sub sup rep com m -> WebSocketsApp (Either (Reply rep) (Complete com)) (Either (Subscribe sub) (Supply sup)) (WebSocketServerRPCT sub sup m)

-- | Note, does not support pingpong
rpcClientSimple :: forall sub sup rep com m. (MonadIO m) => (Maybe (Word16, ByteString) -> m ()) -> RPCClient sub sup rep com m -> WebSocketClientRPCT rep com m (WebSocketsApp (Either (Subscribe sub) (Supply sup)) (Either (Reply rep) (Complete com)) (WebSocketClientRPCT rep com m))
runWebSocketClientRPCTSimple :: (Monad m) => (forall a. WebSocketClientRPCT rep com m a -> m a) -> WebSocketsApp (Either (Subscribe sub) (Supply sup)) (Either (Reply rep) (Complete com)) (WebSocketClientRPCT rep com m) -> WebSocketsApp (Either (Subscribe sub) (Supply sup)) (Either (Reply rep) (Complete com)) m
execWebSocketClientRPCTSimple :: (MonadBaseControl IO m) => WebSocketsApp (Either (Subscribe sub) (Supply sup)) (Either (Reply rep) (Complete com)) (WebSocketClientRPCT rep com m) -> m (WebSocketsApp (Either (Subscribe sub) (Supply sup)) (Either (Reply rep) (Complete com)) m)
runWebSocketServerRPCTSimple :: (Monad m) => (forall a. WebSocketServerRPCT sub sup m a -> m a) -> WebSocketsApp (Either (Reply rep) (Complete com)) (Either (Subscribe sub) (Supply sup)) (WebSocketServerRPCT sub sup m) -> WebSocketsApp (Either (Reply rep) (Complete com)) (Either (Subscribe sub) (Supply sup)) m
execWebSocketServerRPCTSimple :: (MonadBaseControl IO m) => WebSocketsApp (Either (Reply rep) (Complete com)) (Either (Subscribe sub) (Supply sup)) (WebSocketServerRPCT sub sup m) -> m (WebSocketsApp (Either (Reply rep) (Complete com)) (Either (Subscribe sub) (Supply sup)) m)

module Network.WebSockets.RPC.ACKable
ackableRPCServer :: forall sub sup rep com m owner. (MonadIO m, Eq owner, Hashable owner) => (forall a. m a -> IO a) -> owner -> RPCServer sub sup rep com m -> m (RPCServer (ACKable owner sub) (ACKable owner sup) (ACKable owner rep) com m)
ackableRPCClient :: forall sub sup rep com m owner. (MonadIO m, Eq owner, Hashable owner) => (forall a. m a -> IO a) -> owner -> RPCClient sub sup rep com m -> m (RPCClient (ACKable owner sub) (ACKable owner sup) (ACKable owner rep) com m)
data ACKable owner a
ACKable :: UUID -> owner -> Maybe a -> ACKable owner a
[ackableID] :: ACKable owner a -> UUID
[ackableOwner] :: ACKable owner a -> owner

-- | <a>Nothing</a> represents an ACK
[ackableData] :: ACKable owner a -> Maybe a
instance (Data.Aeson.Types.ToJSON.ToJSON owner, Data.Aeson.Types.ToJSON.ToJSON a) => Data.Aeson.Types.ToJSON.ToJSON (Network.WebSockets.RPC.ACKable.ACKable owner a)
instance (Data.Aeson.Types.FromJSON.FromJSON owner, Data.Aeson.Types.FromJSON.FromJSON a) => Data.Aeson.Types.FromJSON.FromJSON (Network.WebSockets.RPC.ACKable.ACKable owner a)
