-- | This module contains orphan 'XMLGenT' instances for 'ServerMonad', 'FilterMonad', 'WebMonad', 'HasRqData', and 'Happstack'. It does not export any functions.
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, TypeFamilies, UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Happstack.Server.XMLGenT where

import Control.Applicative         (Alternative(..))
import Control.Monad               (MonadPlus(..))
import Control.Monad.Trans         (MonadIO(..))
import Happstack.Server.SimpleHTTP (ServerMonad(..), FilterMonad(..), WebMonad(..), HasRqData(..), Happstack(..), Response)
import HSP.XMLGenerator            (XMLGenT(..))
import HSP.Monad                   (HSPT(..))

instance (ServerMonad m) => ServerMonad (XMLGenT m) where
    askRq :: XMLGenT m Request
askRq = m Request -> XMLGenT m Request
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT m Request
forall (m :: * -> *). ServerMonad m => m Request
askRq
    localRq :: (Request -> Request) -> XMLGenT m a -> XMLGenT m a
localRq Request -> Request
f (XMLGenT m a
m) = m a -> XMLGenT m a
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT ((Request -> Request) -> m a -> m a
forall (m :: * -> *) a.
ServerMonad m =>
(Request -> Request) -> m a -> m a
localRq Request -> Request
f m a
m)

instance (FilterMonad a m) => FilterMonad a (XMLGenT m) where
    setFilter :: (a -> a) -> XMLGenT m ()
setFilter = m () -> XMLGenT m ()
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT (m () -> XMLGenT m ())
-> ((a -> a) -> m ()) -> (a -> a) -> XMLGenT m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> a) -> m ()
forall a (m :: * -> *). FilterMonad a m => (a -> a) -> m ()
setFilter
    composeFilter :: (a -> a) -> XMLGenT m ()
composeFilter a -> a
f = m () -> XMLGenT m ()
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT ((a -> a) -> m ()
forall a (m :: * -> *). FilterMonad a m => (a -> a) -> m ()
composeFilter a -> a
f)
    getFilter :: XMLGenT m b -> XMLGenT m (b, a -> a)
getFilter (XMLGenT m b
m) = m (b, a -> a) -> XMLGenT m (b, a -> a)
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT (m b -> m (b, a -> a)
forall a (m :: * -> *) b. FilterMonad a m => m b -> m (b, a -> a)
getFilter m b
m)

instance (WebMonad a m) => WebMonad a (XMLGenT m) where
    finishWith :: a -> XMLGenT m b
finishWith a
r = m b -> XMLGenT m b
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT (m b -> XMLGenT m b) -> m b -> XMLGenT m b
forall a b. (a -> b) -> a -> b
$ a -> m b
forall a (m :: * -> *) b. WebMonad a m => a -> m b
finishWith a
r

instance (HasRqData m) => (HasRqData (XMLGenT m)) where
    askRqEnv :: XMLGenT m RqEnv
askRqEnv = m RqEnv -> XMLGenT m RqEnv
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT m RqEnv
forall (m :: * -> *). HasRqData m => m RqEnv
askRqEnv
    localRqEnv :: (RqEnv -> RqEnv) -> XMLGenT m a -> XMLGenT m a
localRqEnv RqEnv -> RqEnv
f (XMLGenT m a
m) = m a -> XMLGenT m a
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT ((RqEnv -> RqEnv) -> m a -> m a
forall (m :: * -> *) a.
HasRqData m =>
(RqEnv -> RqEnv) -> m a -> m a
localRqEnv RqEnv -> RqEnv
f m a
m)
    rqDataError :: Errors String -> XMLGenT m a
rqDataError = m a -> XMLGenT m a
forall (m :: * -> *) a. m a -> XMLGenT m a
XMLGenT (m a -> XMLGenT m a)
-> (Errors String -> m a) -> Errors String -> XMLGenT m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Errors String -> m a
forall (m :: * -> *) a. HasRqData m => Errors String -> m a
rqDataError

instance (Alternative m, MonadPlus m, Functor m, MonadIO m, ServerMonad m, FilterMonad a m, WebMonad a m, HasRqData m, a ~ Response) => Happstack (XMLGenT m)

instance (ServerMonad m) => ServerMonad (HSPT xml m) where
    askRq :: HSPT xml m Request
askRq              = m Request -> HSPT xml m Request
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT m Request
forall (m :: * -> *). ServerMonad m => m Request
askRq
    localRq :: (Request -> Request) -> HSPT xml m a -> HSPT xml m a
localRq Request -> Request
f (HSPT m a
m) = m a -> HSPT xml m a
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT ((Request -> Request) -> m a -> m a
forall (m :: * -> *) a.
ServerMonad m =>
(Request -> Request) -> m a -> m a
localRq Request -> Request
f m a
m)

instance (FilterMonad a m) => FilterMonad a (HSPT xml m) where
    setFilter :: (a -> a) -> HSPT xml m ()
setFilter          = m () -> HSPT xml m ()
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT (m () -> HSPT xml m ())
-> ((a -> a) -> m ()) -> (a -> a) -> HSPT xml m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> a) -> m ()
forall a (m :: * -> *). FilterMonad a m => (a -> a) -> m ()
setFilter
    composeFilter :: (a -> a) -> HSPT xml m ()
composeFilter a -> a
f    = m () -> HSPT xml m ()
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT ((a -> a) -> m ()
forall a (m :: * -> *). FilterMonad a m => (a -> a) -> m ()
composeFilter a -> a
f)
    getFilter :: HSPT xml m b -> HSPT xml m (b, a -> a)
getFilter (HSPT m b
m) = m (b, a -> a) -> HSPT xml m (b, a -> a)
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT (m b -> m (b, a -> a)
forall a (m :: * -> *) b. FilterMonad a m => m b -> m (b, a -> a)
getFilter m b
m)

instance (WebMonad a m) => WebMonad a (HSPT xml m) where
    finishWith :: a -> HSPT xml m b
finishWith a
r       = m b -> HSPT xml m b
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT (m b -> HSPT xml m b) -> m b -> HSPT xml m b
forall a b. (a -> b) -> a -> b
$ a -> m b
forall a (m :: * -> *) b. WebMonad a m => a -> m b
finishWith a
r

instance (HasRqData m) => (HasRqData (HSPT xml m)) where
    askRqEnv :: HSPT xml m RqEnv
askRqEnv              = m RqEnv -> HSPT xml m RqEnv
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT m RqEnv
forall (m :: * -> *). HasRqData m => m RqEnv
askRqEnv
    localRqEnv :: (RqEnv -> RqEnv) -> HSPT xml m a -> HSPT xml m a
localRqEnv RqEnv -> RqEnv
f (HSPT m a
m) = m a -> HSPT xml m a
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT ((RqEnv -> RqEnv) -> m a -> m a
forall (m :: * -> *) a.
HasRqData m =>
(RqEnv -> RqEnv) -> m a -> m a
localRqEnv RqEnv -> RqEnv
f m a
m)
    rqDataError :: Errors String -> HSPT xml m a
rqDataError           = m a -> HSPT xml m a
forall xml (m :: * -> *) a. m a -> HSPT xml m a
HSPT (m a -> HSPT xml m a)
-> (Errors String -> m a) -> Errors String -> HSPT xml m a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Errors String -> m a
forall (m :: * -> *) a. HasRqData m => Errors String -> m a
rqDataError

instance (Alternative m, MonadPlus m, Functor m, MonadIO m, ServerMonad m, FilterMonad a m, WebMonad a m, HasRqData m, a ~ Response) => Happstack (HSPT xml m)