[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