[Fencommits] fenserve: remove FromMessage instances

Benja Fallenstein benja.fallenstein at gmail.com
Fri May 25 17:29:36 EEST 2007


Fri May 25 17:29:26 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * remove FromMessage instances
diff -rN -u old-fenserve/fendata/Main.hs new-fenserve/fendata/Main.hs
--- old-fenserve/fendata/Main.hs	2007-05-25 17:29:35.000000000 +0300
+++ new-fenserve/fendata/Main.hs	2007-05-25 17:29:35.000000000 +0300
@@ -48,29 +48,11 @@
                     Str "\n<hr>"])
     where v = [Just $ Var 0]
 
-instance FromMessage (String,String) where
-    fromMessageM m = do cat <- lookM m "category"; name <- lookM m "name" 
-                        return (cat, name)
-
-instance FromMessage String where
-    fromMessageM m = lookM m "name" 
-
-instance FromMessage (Exp, [Value], Maybe String) where
-    fromMessageM m = do let n = maybe 0 read (lookM m "count")
-                        vals <- forM [1..n] $ \i -> lookM m ("arg" ++ show i)
-                        exp <- lookM m "exp"
-                        return (read exp, vals, lookM m "name")
-
-instance FromMessage ([Value], Maybe String) where
-    fromMessageM m = do let n = maybe 0 read (lookM m "count")
-                        vals <- forM [1..n] $ \i -> lookM m ("arg" ++ show i)
-                        return (vals, lookM m "name")
-
-instance FromMessage (Exp, Exp, Type, Maybe String) where
-    fromMessageM m = do exp <- lookM m "exp"
-                        old <- lookM m "old"
-                        ty <- lookM m "type"
-                        return (read exp, read old, read ty, lookM m "name")
+readArgs :: Request -> [Value]
+readArgs req = fromMaybe [] $ do
+    n <- fmap read $ lookM req "count"
+    forM [1..n] $ \i -> lookM req ("arg" ++ show i)
+
 
 addField req state = (returnTo,state') where
     state' = state { stateSchema = Map.insert cat (fs ++ [name]) (stateSchema state),
@@ -85,8 +67,9 @@
     Just name = lookM req "field" 
     returnTo = fromMaybe ("item/"++item) (lookM req "returnTo")
 
-addCategory name s = ("table",
-    s { stateSchema = Map.insert (uncapitalize name) [] $ stateSchema s})
+addCategory req s = ("table",
+    s { stateSchema = Map.insert (uncapitalize name) [] $ stateSchema s}) where
+    Just name = lookM req "name"
 
 expand s (Call n args) = case readFun s n of 
     Fun _ _ body -> Just 
@@ -281,10 +264,14 @@
     
 main = stdHTTP [ debugFilter
                , h ["potion"] GET $ ok $ \() -> run $ 
-                   \(exp,args,name) s -> let ?root = "" in potionGet exp args name s
+                   \req s -> let ?root = "" in potionGet (read $ fromJust $ lookM req "exp") (readArgs req) (lookM req "name") s
                , h (Prefix ["potion"]) GET $ ok $ \(fun:args) -> run $ 
-                   \(_::[String],name) s -> let ?root = concat (take (1 + length args) $ repeat "../") in potionGet (Call fun (map (Just . Str) args)) args name s
-               , h ["edit"] GET $ ok $ \() -> run edit
+                   \req s -> let ?root = concat (take (1 + length args) $ repeat "../") in potionGet (Call fun (map (Just . Str) $ readArgs req)) (readArgs req) (lookM req "name") s
+               , h ["edit"] GET $ ok $ \() -> run $ \req ->
+                     edit (read $ fromJust $ lookM req "exp",
+                           read $ fromJust $ lookM req "old",
+                           read $ fromJust $ lookM req "type",
+                           lookM req "name")
                , h ["editTemplate"] GET $ seeOther $ \() -> runRedirect editTemplate
                , h ["makefun"] GET $ ok $ \() -> run makeFun
                , h ["table"] GET $ ok $ \() -> run showTable




More information about the Fencommits mailing list