colchis-0.1.0.0: src/Network/Colchis/Protocol.hs
{-# LANGUAGE Rank2Types #-}
module Network.Colchis.Protocol (
Protocol(..)
) where
import Data.Aeson
import Control.Monad.Trans.Except
import Pipes
{-|
A bidirectional `Proxy` waiting for a request, ready to be composed with `+>>` or `>+>`.
`Protocol`s format incoming requests from downstream before sending them upstream. They also extract the values from returning protocol responses and send them downstream.
`Protocol`s isolate clients from the specific details of each protocol.
-}
type Protocol s m e = forall r. (s,Value) -> Proxy Value Value (s,Value) Value (ExceptT e m) r