packages feed

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 $