{-# LANGUAGE TemplateHaskell, DeriveDataTypeable, TypeSynonymInstances, MultiParamTypeClasses, TypeFamilies, FlexibleContexts #-} -- | DBState.hs -- A module which contain happstack state instances. module DBState where import DB import Happstack.State import Data.Typeable import Control.Monad.State import Control.Monad.Reader import qualified Data.Foldable as F import qualified Data.Sequence as Seq --- data DBWrap = DBWrap DB deriving (Show, Typeable) instance Version URL $(deriveSerialize ''URL) instance Version JID $(deriveSerialize ''JID) instance Version (Seq.Seq a) where mode = Primitive instance Serialize a => Serialize (Seq.Seq a) where getCopy = contain $ fmap Seq.fromList safeGet putCopy = contain . safePut . F.toList instance Version DBWrap $(deriveSerialize ''DBWrap) --- addThread' url jid = processDB $ addThread url jid delThread' url jid = processDB $ delThread url jid delThreadAll' url = processDB $ delThreadAll url bye' jid = processDB $ bye jid setDescription' d url jid = processDB $ setDescription url jid d updateThread' url l = processDB $ updateThread url l processDB :: DBProcess -> Update DBWrap String processDB f = do DBWrap db <- get let (msg, db') = f db put $ DBWrap db' return msg getDB :: Query DBWrap DB getDB = do DBWrap db <- ask return db --- $(mkMethods ''DBWrap ['addThread', 'delThread', 'delThreadAll', 'bye', 'setDescription', 'updateThread', 'getDB]) instance Component DBWrap where type Dependencies DBWrap = End initialValue = DBWrap newDB