aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2015-03-17 04:32:57 +0000
committerSean Whitton <spwhitton@spwhitton.name>2015-03-17 04:32:57 +0000
commit439e162a5ebed2a4f8d12a7c24d557b3ef7d3c9b (patch)
treee6ca0c665fd34619fa5e322f3f0f3b3b2736822c
parent3217e2b4f23f1bb35ff831b10cc0a7ff3080fa2d (diff)
downloadsariulclocks-439e162a5ebed2a4f8d12a7c24d557b3ef7d3c9b.tar.gz
factor out my new monad
-rw-r--r--src/Control/Monad/Page.hs26
-rw-r--r--src/sariulclocks.hs42
2 files changed, 27 insertions, 41 deletions
diff --git a/src/Control/Monad/Page.hs b/src/Control/Monad/Page.hs
new file mode 100644
index 0000000..82b7715
--- /dev/null
+++ b/src/Control/Monad/Page.hs
@@ -0,0 +1,26 @@
+module Control.Monad.Page where
+
+import Control.Monad.State
+import Control.Monad.Trans (lift)
+import Types.Session
+import Types.Scores
+import Types.Classes
+
+type Page = StateT Session (State ScoresList)
+
+runPage :: Page a -> ScoresList -> Session -> (ScoresList, Session, a)
+runPage k scores session = (scores', session', a)
+ where
+ ((a, session'), scores') = runState (runStateT k session) scores
+
+putSession :: Session -> Page ()
+putSession = put
+
+getSession :: Page Session
+getSession = get
+
+getScores :: Page ScoresList
+getScores = lift get
+
+putScores :: ScoresList -> Page ()
+putScores = lift . put
diff --git a/src/sariulclocks.hs b/src/sariulclocks.hs
index bec831e..3176a38 100644
--- a/src/sariulclocks.hs
+++ b/src/sariulclocks.hs
@@ -12,47 +12,7 @@ import Control.Monad.Trans (lift)
import Data.Maybe (fromMaybe)
import Types.Session
import Types.Clocks
--- import Control.Monad.Reader
-import Control.Monad.State
--- import System.IO (stdin, stdout)
-
--- Monad stack: scores list state -> CGI -> IO. This is mostly black
--- magic to me at this point, from
--- <https://wiki.haskell.org/Web/Literature/Practical_web_programming_in_Haskell#The_CGI_Monad>.
-
--- newtype AppT m a = App (StateT ScoresList (CGIT m) a)
--- deriving (Monad, MonadIO, MonadState ScoresList)
--- type App a = AppT IO a
-
--- instance MonadCGI (AppT IO) where
--- cgiAddHeader n v = App . lift $ cgiAddHeader n v
--- cgiGet x = App . lift $ cgiGet x
-
--- -- runApp :: App CGIResult -> IO ()
--- -- runApp (App a) = runCGIT (evalStateT a zeroScores)
-
--- End the black magic.
-
--- Page monad stack for generating the page
-
-type Page = StateT Session (State ScoresList)
-
-runPage :: Page a -> ScoresList -> Session -> (ScoresList, Session, a)
-runPage k scores session = (scores', session', a)
- where
- ((a, session'), scores') = runState (runStateT k session) scores
-
-putSession :: Session -> Page ()
-putSession = put
-
-getSession :: Page Session
-getSession = get
-
-getScores :: Page ScoresList
-getScores = lift get
-
-putScores :: ScoresList -> Page ()
-putScores = lift . put
+import Control.Monad.Page
makePage :: Page Html
makePage = return (h1 << "Hello World")