[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