It show almost all of the functionalities of MFlow, so it has a lot of imports. Here the header and the main function is displayed:
{-# LANGUAGE OverloadedStrings, ScopedTypeVariables, DeriveDataTypeable, NoMonomorphismRestriction #-}
module Main where
import MFlow.Hack -- hiding (ask)
import Hack.Handler.SimpleServer
import MFlow.Forms.Blaze.Html
import MFlow.Forms.Widgets
import MFlow.Forms.Ajax
import Text.Blaze.Html5 as El
import Text.Blaze.Html5.Attributes as At hiding (step)
import Text.Blaze.Internal(text)
import Data.String
--import MFlow.Forms.Test
import MFlow
import MFlow.FileServer
import MFlow.Forms.Ajax
import MFlow.Forms.Admin
import MFlow.Forms
import Data.TCache
import Control.Monad.Trans
import Data.Typeable
import Control.Concurrent
import Control.Exception as E
import qualified Data.ByteString.Char8 as SB
import qualified Data.Vector as V
import Data.Maybe
import Data.Monoid
--test= runTest [(15,"shop")]
main= do
syncWrite SyncManual
setFilesPath ""
addFileServerWF
addMessageFlows [("" ,transient $ runFlow mainf),
("shop" ,runFlow shopCart)]
run 80 hackMessageFlow
adminLoop
stdheader c= html << body << (p << text "You can press the back button" <> c)
data Options= CountI | CountS | TextEdit |Shop | Action | Ajax | Select deriving (Bounded, Enum,Read, Show,Typeable)
mainf= do
setHeader stdheader
r <- ask="ask" br="br" nbsp="nbsp"> wlink TextEdit (b << text "Content Management")->
<|> br ++> wlink Shop (b << text "example of transfer to another flow (shopping)")
<|> br ++> wlink CountI (b << text "increase an Int")
<|> br ++> wlink CountS (b << text "increase a String")
<|> br ++> wlink Action (b << text "Example of a string widget with an action")
<|> br ++> wlink Ajax (b << text "Simple AJAX example")
<|> br ++> wlink Select (b << text "select options")
<++ (br <> linkShop) -- this is an ordinary XHtml link
case r of
CountI -> clickn 0
CountS -> clicks "1"
Action -> actions 1
Ajax -> ajaxsample
Select -> options
TextEdit -> textEdit
Shop -> transfer "shop"
mainf
where
linkShop= a ! href "shop" << text "shopping"
This example uses the last version of MFlow at https://github.com/agocorona/MFlow.
It uses the last version of Workflow https://github.com/agocorona/Workflow
TCache : https://github.com/agocorona/TCache
RefSerialize: https://github.com/agocorona/RefSerialize