[Fencommits] fenfire-hs: refactor Fenfire.RDF.query interface slightly: have a separate function returning single values, because having this as one of the overloaded result values of query can make for *bad* error messages

Benja Fallenstein benja.fallenstein at gmail.com
Wed Apr 4 11:11:50 EEST 2007


Wed Apr  4 11:11:27 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * refactor Fenfire.RDF.query interface slightly: have a separate function returning single values, because having this as one of the overloaded result values of query can make for *bad* error messages
diff -rN -u old-fenfire-hs/Fenfire/RDF.hs new-fenfire-hs/Fenfire/RDF.hs
--- old-fenfire-hs/Fenfire/RDF.hs	2007-04-04 11:11:49.000000000 +0300
+++ new-fenfire-hs/Fenfire/RDF.hs	2007-04-04 11:11:50.000000000 +0300
@@ -511,14 +511,24 @@
 instance Pattern pat (Either String r) => Pattern pat (Maybe r) where
     query = mquery
     
-instance Pattern pat (Either String r) => Pattern pat r where
-    query pat g = either error id $ query pat g
-    
+instance Pattern pat (Set Quad) => Pattern pat Bool where
+    query pat = not . Set.null . (id :: Endo (Set Quad)) . query pat
+
 mquery :: (Pattern pat (Either String r), Monad m) => pat -> Graph -> m r
 mquery pat g = either fail return $ query pat g
 
-instance Pattern pat (Set Quad) => Pattern pat Bool where
-    query pat = not . Set.null . (id :: Endo (Set Quad)) . query pat
+query' :: Pattern pat (Either String r) => pat -> Graph -> r
+query' pat g = either error id $ query pat g
+
+iquery :: (?graph :: Graph, Pattern pat r) => pat -> r
+iquery pat = query pat ?graph
+
+imquery :: (?graph :: Graph, Pattern pat (Either String r), Monad m) => 
+           pat -> m r
+imquery pat = mquery pat ?graph
+
+iquery' :: (?graph :: Graph, Pattern pat (Either String r)) => pat -> r
+iquery' pat = query' pat ?graph
     
     
 class (Ord a, Show a) => PatternSlot a where toPatternSlot :: Node -> a
diff -rN -u old-fenfire-hs/Fenfire/Utils.hs new-fenfire-hs/Fenfire/Utils.hs
--- old-fenfire-hs/Fenfire/Utils.hs	2007-04-04 11:11:49.000000000 +0300
+++ new-fenfire-hs/Fenfire/Utils.hs	2007-04-04 11:11:50.000000000 +0300
@@ -56,6 +56,7 @@
 modifies :: MonadState outer m => Changer inner outer -> Endo inner -> m ()
 modifies chg f = modify (chg f)
 
+
 type ChangerM m inner outer = EndoM m inner -> EndoM m outer
                                        
 msets :: MonadState outer m => ChangerM m inner outer -> inner -> EndoM m outer
diff -rN -u old-fenfire-hs/Fenfire.fhs new-fenfire-hs/Fenfire.fhs
--- old-fenfire-hs/Fenfire.fhs	2007-04-04 11:11:49.000000000 +0300
+++ new-fenfire-hs/Fenfire.fhs	2007-04-04 11:11:50.000000000 +0300
@@ -81,18 +81,15 @@
 dc_date = IRI "http://purl.org/dc/elements/1.1/date"
 dcterms_created = IRI "http://purl.org/dc/terms/created"
 
-iquery :: (Pattern pat r, ?graph :: Graph) => pat -> r
-iquery pat = query pat ?graph
-
 conns :: (?vs :: ViewSettings, ?graph :: Graph) => Node -> Dir -> [Path]
 conns node dir = Cache.cached (Cache.byAddress ?graph, (node,dir))
                               connsCache result where
     result = map (\(prop, node') -> Path node [Conn prop dir node']) sorted
     sorted = List.sortBy cmp' list
-    query' (x,p,y) = case dir of Pos -> iquery (x,p,y); Neg -> iquery (y,p,x)
-    list = [(p,n) | p <- query' (node, X, Any),
+    cquery (x,p,y) = case dir of Pos -> iquery (x,p,y); Neg -> iquery (y,p,x)
+    list = [(p,n) | p <- cquery (node, X, Any),
                     not (p `elem` hiddenProps ?vs), 
-                    n <- query' (node, p, X) ]
+                    n <- cquery (node, p, X) ]
     cmp n1 n2 | Just d1 <- f n1, Just d2 <- f n2 = compare d1 d2 where
         f n = msum [g dc_date n, g dcterms_created n]
         g prop n = iquery (n, prop, X) :: Maybe Node




More information about the Fencommits mailing list