/usr/lib/hugs/packages/fgl/Data/Graph/Inductive/Internal/RootPath.hs is in libhugs-fgl-bundled 98.200609.21-5.3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | -- (c) 2000-2005 by Martin Erwig [see file COPYRIGHT]
-- | Inward directed trees as lists of paths.
module Data.Graph.Inductive.Internal.RootPath (
-- * Types
RTree,LRTree,
-- * Operations
getPath,getLPath,
getDistance,
getLPathNodes
) where
import Data.Graph.Inductive.Graph
instance Eq a => Eq (LPath a) where
(LP []) == (LP []) = True
(LP ((_,x):_)) == (LP ((_,y):_)) = x==y
(LP _) == (LP _) = False
instance Ord a => Ord (LPath a) where
compare (LP []) (LP []) = EQ
compare (LP ((_,x):_)) (LP ((_,y):_)) = compare x y
compare _ _ = error "LPath: cannot compare to empty paths"
type LRTree a = [LPath a]
type RTree = [Path]
first :: ([a] -> Bool) -> [[a]] -> [a]
first p xss = case filter p xss of
[] -> []
x:_ -> x
-- | Find the first path in a tree that starts with the given node
findP :: Node -> LRTree a -> [LNode a]
findP _ [] = []
findP v ((LP []):ps) = findP v ps
findP v ((LP (p@((w,_):_))):ps) | v==w = p
| otherwise = findP v ps
getPath :: Node -> RTree -> Path
getPath v = reverse . first (\(w:_)->w==v)
getLPath :: Node -> LRTree a -> LPath a
getLPath v = LP . reverse . findP v
getDistance :: Node -> LRTree a -> a
getDistance v = snd . head . findP v
getLPathNodes :: Node -> LRTree a -> Path
getLPathNodes v = (\(LP p)->map fst p) . getLPath v
|