This module store the interface between the evaluator and the manipulated graph.
- class (GraphPath rezPath, Eq a) => GraphWalker a rezPath | a -> rezPath where
- attribOf :: String -> a -> Maybe String
- nameOf :: a -> Maybe String
- childrenOf :: (IOMockable m, Monad m) => a -> m [a]
- valueOf :: a -> String
- indirectLinks :: a -> [rezPath]
- accessGraph :: (IOMockable m, Functor m, Monad m) => Loggers m -> rezPath -> m (AccessResult a rezPath)
- rawAccess :: (IOMockable m, Functor m, Monad m) => Loggers m -> rezPath -> m (AccessResult a rezPath)
- isHistoryMutable :: a -> Bool
- deepValueOf :: (IOMockable m, Functor m, Monad m) => a -> m String
- class Show a => GraphPath a where
- data AccessResult a rezPath
- type Logger m = String -> m ()
- type Loggers m = (Logger m, Logger m, Logger m)
- type NodePath a = [(a, Int)]
- descendants :: (IOMockable m, Monad m, GraphWalker a r) => a -> m [(a, [(a, Int)])]
- findNamed :: (Functor m, Monad m, IOMockable m, GraphWalker a r) => String -> a -> m [(a, [(a, Int)])]
- findFirstNamed :: (Functor m, Monad m, IOMockable m, GraphWalker a r) => String -> [a] -> m (Maybe (a, [(a, Int)]))
- pureDescendants :: (a -> [a]) -> a -> [(a, [(a, Int)])]
- findNamedPure :: GraphWalker a r => (a -> [a]) -> String -> a -> [(a, [(a, Int)])]
- findFirstNamedPure :: GraphWalker a r => (a -> [a]) -> String -> [a] -> Maybe (a, [(a, Int)])
The aim of this typeclass is to permit the use of different html/xml parser if if the first one is found to be bad. All the logic should use this interface.
Minimal implementation : everything but deepValueOf.
Get back an attribute of the node if it exists
If the current node is named, return it's name, otherwise return Nothing.
Get all the children of the current node.
Retrieve the value of the tag (textual)
Retrieve all the indirectly linked content of a node, can be used for element like an HTML link or an linked image/obj
The idea behind link following. The graph engine may have another name for the resource, so an updated name can be given. The given function is there to log information, the second is to log errors
Same as accessGraph, but don't try to return a structured result, only blobs.
Tell if the history associated is fixed or not. If the history is not fixed and can change (if you are querying the filesystem for example, it should return False)
Like value of, but force the node to collect the value of all it's children in the process.
Represent indirect links or links which necessitate the use of the IO monad to walk around the graph.
Combine two path togethers, you can think of the / operator for an equivalence.
conversion to be used to import path from attributes/document (not really well specified).
Move semantic, try to dump the pointed resource to the current folder.
Given a graphpath, transform it to a filepath which can be used to store a node.
Result of indirect access demand.
Type used to propagate different logging level across the software.
Represent the path used to find the node from the starting point of the graph.
Return a list of all the children/linked node of a given node. The given node is not included in the list. A list of node with the taken path is returned.
Given a tag and a name, retrieve the first matching tags in the hierarchy. It must return the list of ancestors permitting the acess to the path used to find children
the returned list must contain : the node itself if it match the name, and all the children containing the good name.
Return the first found node if any.
Helper functions without monadic interface.
descendants, but without the monadic interface.
findNamed but without the monadic interface.