| Safe Haskell | None |
|---|
Network.Colchis
Description
This module defines the client monad and the type signatures for transports and prototocols.
- type JSONClient s m r = Client (s, Value) Value (ExceptT JSONClientError m) r
- type JSONClientError = (Value, Text, Value)
- call :: (ToJSON a, FromJSON r, Monad m) => s -> a -> JSONClient s m r
- type Protocol s m e = forall r. (s, Value) -> Proxy Value Value (s, Value) Value (ExceptT e m) r
- type Transport t m = MonadIO m => forall r. Value -> Server Value Value (t m) r
- runJSONClient :: (MonadTrans t, MFunctor t, MonadIO m, Monad (t m)) => Transport t m -> Protocol s m e -> JSONClient s m r -> t m (Either e (Either JSONClientError r))
- umap :: Monad m => (b' -> a') -> b' -> Proxy a' x b' x m r
- umapM :: Monad m => (b' -> m a') -> b' -> Proxy a' x b' x m r
- hoist :: MFunctor t => forall m b n. Monad m => (forall a. m a -> n a) -> t m b -> t n b
Client
type JSONClient s m r = Client (s, Value) Value (ExceptT JSONClientError m) rSource
type JSONClientError = (Value, Text, Value)Source
(request associated with the error, error message, response that caused the error)
call :: (ToJSON a, FromJSON r, Monad m) => s -> a -> JSONClient s m rSource
Protocol
type Protocol s m e = forall r. (s, Value) -> Proxy Value Value (s, Value) Value (ExceptT e m) rSource
A bidirectional Proxy waiting for a request, ready to be composed with +>> or >+>.
Protocols format incoming requests from downstream before sending them upstream. They also extract the values from returning protocol responses and send them downstream.
Protocols isolate clients from the specific details of each protocol.
Transport
Running clients
runJSONClient :: (MonadTrans t, MFunctor t, MonadIO m, Monad (t m)) => Transport t m -> Protocol s m e -> JSONClient s m r -> t m (Either e (Either JSONClientError r))Source
Utils
These functions can be used to manipulate requests flowing upstream.
Re-exported
When the function that runs the transport layer requires the underlying monad to be whittled down to IO, hoist (along with a suitable monad morphism) can come in handy.