[Fencommits] fenserve: refactor a teeny bit to make the code even cleaner =)

Benja Fallenstein benja.fallenstein at gmail.com
Thu Mar 22 19:49:19 EET 2007


Mon Mar 19 16:03:20 EET 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * refactor a teeny bit to make the code even cleaner =)
diff -rN -u old-fenserve/FenServe.hs new-fenserve/FenServe.hs
--- old-fenserve/FenServe.hs	2007-03-22 19:49:18.000000000 +0200
+++ new-fenserve/FenServe.hs	2007-03-22 19:49:18.000000000 +0200
@@ -66,10 +66,7 @@
 data Directory = Dir { dirNode :: Node, dirEntries :: [Entry] } deriving (Show, Read)
 
 emptyState :: Ptr
-emptyState = flip runStormIO Map.empty $ do 
-    let (node, ts) = runToRDF "ex:foo" $ toRDF $ Dir (IRI "ex:foo#dir") []
-    bid <- writeGraph $ setGraphURI "ex:foo" $ listToGraph $ Set.toList ts
-    return $ changeBaseURI "ex:foo" (bURI bid) node
+emptyState = runStormIO (writeData "ex:" $ Dir (IRI "ex:") []) Map.empty where
 
 type Ptr = (Node, Pool)
 
@@ -162,6 +159,15 @@
 readData node = do graph <- readGraph (bID node)
                    return $ fromRDF graph node
 
+writeData :: ToRDF a => String -> a -> StormIO Node
+writeData baseURI value = do
+    let (node, ts) = runToRDF baseURI $ toRDF value
+    bid <- writeGraph $ setGraphURI baseURI $ listToGraph $ Set.toList ts
+    return $ changeBaseURI baseURI (bURI bid) node
+
+updateData :: (FromRDF a, ToRDF a) => EndoM StormIO a -> EndoM StormIO Node
+updateData f node = readData node >>= f >>= writeData (bURI $ bID node)
+
 getURI :: [String] -> Node -> StormIO ByteString
 getURI [x] dir = readData dir >>= f . dirEntries where
     f (FileEntry n r : _ ) | n == x = getBlock (bID r)
@@ -172,17 +178,9 @@
     f (_              : es) = f es
     f []                    = return $ toUTF $ "dir not found: " ++ x
 
-updateData :: (FromRDF a, ToRDF a) => EndoM StormIO a -> EndoM StormIO Node
-updateData f node = do 
-    value' <- f =<< readData node; let uri = bURI (bID node)
-    let (node',ts) = runToRDF uri $ toRDF value'
-        graph' = setGraphURI uri $ listToGraph $ Set.toList ts
-    bid' <- writeGraph graph'
-    return $ changeBaseURI uri (bURI bid') node'
-
 putURI :: [String] -> ByteString -> Node -> StormIO Node
 putURI path s dir = do rid <- addBlock s; putURI' path (bIRI rid) dir where
-  putURI' [x] r dir = do updateData f' dir where
+  putURI' [x] r dir = updateData f' dir where
     f' (Dir n entries) = return $ Dir n (f entries)
     f (FileEntry n _ : es) | n == x = FileEntry n r : es
     f (e             : es) = e : f es




More information about the Fencommits mailing list