--

import Graph
import Basic


ex1 = mkGraph [(1,"a"),(2,"b"),(3,"c")]
              [(1,2,"right"),(2,1,"left"),
               (2,3,"down"),(3,1,"up")]


(Just(ps,n,lab,ss),ex2) = match 2 ex1

(Just(ps2,n2,lab2,ss2),ex3) = match 3 ex2

ex4 = (ps2,n2,lab2,ss2) & ex3


ex5 = nmap (ord . head) ex1

ex6 = emap length ex1

mymap f g =
  let ns = nodes g
      (Just(ps,n,lab,ss),g2) = match (head ns) g
  in (ps,n,f lab,ss) & (mymap f g2)


data Tree a = Branch a [Tree a] deriving Show

df :: Node -> Graph b a -> (Tree b,Graph b a)
df root g =
  let (Just(_,v,lab,ss), g') = match root g
      (r,g1) = dff ss g'
  in (Branch lab r,g1)

dff :: [(c,Node)] -> Graph b c -> ([Tree b],Graph b c)
dff [] g = ([],g)
dff ((lab,v):l) g =
  let (x,g1) = df v g
      (y,g2) = dff l g1
  in (x:y,g2)

ex7 = fst (df 2 ex1)

--