[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