{-# LANGUAGE TypeFamilies, FlexibleContexts, PackageImports #-} module Network.XmlPush (XmlPusher(..), Zero(..), One(..), Two(..)) where import "monads-tf" Control.Monad.Error import Control.Monad.Base import Control.Monad.Trans.Control import Data.HandleLike import Data.Pipe import Text.XML.Pipe import Network.PeyoTLS.Client import Network.Sasl class XmlPusher xp where type NumOfHandle xp :: * -> * type PusherArgs xp :: * -> * generate :: ( ValidateHandle h, MonadBaseControl IO (HandleMonad h), MonadError (HandleMonad h), SaslError (ErrorType (HandleMonad h)) ) => NumOfHandle xp h -> PusherArgs xp h -> HandleMonad h (xp h) readFrom :: (HandleLike h, MonadBase IO (HandleMonad h)) => xp h -> Pipe () XmlNode (HandleMonad h) () writeTo :: (HandleLike h, MonadBase IO (HandleMonad h)) => xp h -> Pipe XmlNode () (HandleMonad h) () data Zero a = Zero deriving Show data One a = One a deriving Show data Two a = Two (Maybe a) (Maybe a)