packages feed

FermatsLastMargin-0.1: FLM/State.hs

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