packages feed

MFlow-0.4.5.2: Demos/AcidState.hs

-- Modified From: https://github.com/acid-state/acid-state/blob/master/examples/HelloDatabase.hs
-- Aistis Raulinaitis
{-# LANGUAGE TypeFamilies, DeriveDataTypeable, TemplateHaskell #-}
{-# OPTIONS -XCPP #-}
module AcidState (
acidState
) where

--import Data.Acid

import Control.Monad.State                   ( get, put )
import Control.Monad.Reader                  ( ask )
import Data.SafeCopy

-- #define ALONE

#ifdef ALONE
import MFlow.Wai.Blaze.Html.All

main = do
--  db <- initAcid
  runNavigation "" . step $ acidState db

#else

import MFlow.Wai.Blaze.Html.All hiding(page)
import Menu  hiding (Database)

#endif


--
--type Message = String
--data Database = Database [Message]



--initAcid= openLocalStateFrom "dist/db/" (Database [])
--
--addMessage :: Message -> Update Database ()
--addMessage msg = do
--  Database messages <- get
--  put $ Database (msg:messages)
--
--viewMessages :: Int -> Query Database [Message]
--viewMessages limit = do
--  Database messages <- Control.Monad.Reader.ask
--  return $ take limit messages
--
-- $(deriveSafeCopy 0 'Data.SafeCopy.base ''Database)
-- $(makeAcidic ''Database ['addMessage, 'viewMessages])
--
--
--getLast10 :: AcidState (EventState AddMessage) -> IO String
--getLast10 database = do
--  messages <- query database (ViewMessages 10)
--  return $ concat [ message ++ "  " | message <- messages ]
--
--addMsg :: AcidState (EventState AddMessage) -> Message -> IO ()
--addMsg database msg = update database (AddMessage msg)
--
--
--
--
acidState db= do
    page $ wlink () << p << "disabled for compatibility with stackage. uncomment it to run it"
--    r <- page $ h3 << "Persistent message demo "
--          ++> getString Nothing
--          <** submitButton "OK"

--
--  liftIO $ addMsg db r
--
--  last10 <- liftIO $ getLast10 db
--
--  page $ b
--    << ("You typed: "++ r ++ ", it has been added to the acid state db.")
--    ++> p << ("Here are the last 10 things in the db: " ++ last10)
--    ++> wlink () << p << "next"
--  acidState db