hMollom-0.2: src/Network/Mollom/MollomMonad.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- |Module that implements the Mollom monad stack
-- We wrap the configuration and the serverlist
-- in a Reader and a State, respectively
module Network.Mollom.MollomMonad
( MollomMonad
-- , createMollomMonad
-- , runMollomMonad
, MollomState
-- , runMollomState
) where
import Control.Monad.Reader
import Control.Monad.Writer
import Control.Monad.State
import Control.Monad.Error
import Data.Monoid
import Network.Mollom.Internals
type SessionID = String
type Server = String
type MollomState = ReaderT MollomConfiguration (StateT MollomServerList IO)
type MollomMonad = ErrorT MollomError (StateT (Maybe SessionID) MollomState)
{-
newtype Eq a => MollomState a = MollomState {
runMollomState :: ReaderT MollomConfiguration (StateT MollomServerList IO) a
} deriving (Monad, MonadIO, MonadReader MollomConfiguration, MonadState MollomServerList)
-}
{-
newtype Eq a => MollomMonad a = MollomMonad {
runMollomMonad :: ErrorT String (StateT SessionID MollomState) a
} deriving (Monad, MonadIO, MonadState SessionID)
-}
-- createMollomMonad :: MollomConfiguration -> MollomMonad ()
-- createMollomMonad configuration = MollomMonad $