{-# LANGUAGE FlexibleInstances, TemplateHaskell, UndecidableInstances #-}
module FLM.State(MbGetPage(..),AddPage(..), GetPages(..), UpdatePage(..), stateFuns) where
import FLM.Types
import FLM.WikiPages
import FLM.HAppS -- hiding (Updated(..), Id(..))
import HAppS.Data
import HAppS.StdMain.StartStateTH
-- getWords page = let Just (Content s) = gFind page in map Word $ words s
-- $(inferIxSet "WikiPages" ''WikiPage 'getWords [''PageName, ''Updated, ''PageText])
-- state
$(deriveAll [''Read, ''Show, ''Default]
[d|
data State = State { pages :: WikiPages }
|]
)
$(inferStartState ''State)
$(inferRecordUpdaters ''State)
mbGetPage pid = (return . getOne . (@= (pid :: Id) ) . pages ) =<< ask
--getPage pagename = (return . getOne . (@=PName pagename) . pages) =<< ask
addPage wpage = withPages $ modify (insert wpage)
getPages () = (return . PageList . toList . pages) =<< ask
updatePage pid wikipage = withPages $ modify (updateIx (pid :: Id) wikipage)
$(expose ['addPage, 'mbGetPage, 'getPages, 'updatePage ] )