{-# LANGUAGE Rank2Types #-}

module Network.Colchis.Transport (
        Transport(..)        
    )  where

import Data.Aeson
import Control.Monad.IO.Class
import Control.Monad.Trans.Except
import Pipes.Core

{-|
  A pipes `Server` waiting for a request, ready to be composed with `+>>` or `>+>`.

  `Transport`s send requests over the wire and receive the responses.
-}
type Transport t m = (MonadIO m) => forall r. Value -> Server Value Value (t m) r