[Fencommits] fenserve: correct architecture bug in incomplete FenServe reimpl

Benja Fallenstein benja.fallenstein at gmail.com
Thu Apr 5 16:14:10 EEST 2007


Thu Apr  5 16:13:51 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * correct architecture bug in incomplete FenServe reimpl
diff -rN -u old-fenserve/FenServe.hs new-fenserve/FenServe.hs
--- old-fenserve/FenServe.hs	2007-04-05 16:14:10.000000000 +0300
+++ new-fenserve/FenServe.hs	2007-04-05 16:14:10.000000000 +0300
@@ -94,14 +94,14 @@
 type Handler = Request -> FenServe Result
 
 data Resource = Resource {
-    readResource :: FromRDF a => FenServe a,
-    modifyResource :: (FromRDF a, ToRDF a) => (a -> FenServe a) -> FenServe (),
+    getResource :: FromRDF a => FenServe a,
+    putResource :: ToRDF a => a -> FenServe (),
     handleResource :: Handler }
-
-data Resolver = forall a. (FromRDF a, ToRDF a) =>
-    Resolver (Resolvers -> [String] -> a -> [String] -> FenServe Resource)
     
 type Resolvers = Map Node Resolver
+data Resolver = forall a. (FromRDF a, ToRDF a) =>
+                Resolver (Resolvers -> a -> (a -> FenServe ()) -> [String] 
+                       -> FenServe Resource)
 
 {-
 instance StartState Node where 
@@ -117,15 +117,14 @@
 
 instance ToMessage ByteString where
     toMessageBodyM = return
-
+    
 resolve :: Resolvers -> [String] -> FenServe Resource
-resolve rs p = do root <- get; resolve' rs [] root p
-
-resolve' :: Resolvers -> [String] -> Node -> [String] -> FenServe Resource
-resolve' rs p0 n p1 = do g <- getGraph n; ty <- mquery (n, fs_type, X) g
-                         Resolver r <- Map.lookup ty rs
-                         r rs p0 (fromRDF g n) p1
+resolve rs p = do root <- get; resolve' rs root put p
 
+resolve' :: Resolvers -> Node -> (Node -> FenServe ()) -> [String] -> FenServe Resource
+resolve' rs n put' p = do g <- getGraph n; ty <- mquery (n, fs_type, X) g
+                          Resolver r <- Map.lookup ty rs
+                          r rs (fromRDF g n) (\x -> addData x >>= put') p
 
 defaultResolvers = Map.fromList [(fs_Directory, Resolver resolveDir)]
 
@@ -139,7 +138,8 @@
 instance FromRDF Directory where fromRDF = error "FenServe: XXX"
 instance ToRDF Directory where toRDF = error "FenServe: XXX"
 
-resolveDir rs p0 (Dir m) (p:p1) = resolve' rs (p0++[p]) (m Map.! p) p1
+resolveDir rs (Dir m) put' (p:ps) =
+    resolve' rs (m Map.! p) (\n -> put' $ Dir $ Map.insert p n m) ps
                                 
 
 {-




More information about the Fencommits mailing list