{-# 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 ] )