packages feed

spike-0.1: src/Graphs.hs

module Graphs where

import Data.Tree
import Data.Tree.Zipper
import Data.Graph.Inductive

treeToGraph :: (Graph gr) => Tree a -> gr a ()
treeToGraph tr = labelTree tr [1..]

labelTree tr = let tr1 = fmap tr (\x -> (x,0))
                   tp1 = fromTree tr1
                   tp2 = go 0 tp1
                   tr2 = toTree tp2
                         

                   go ix tp = let tp' = modifyLabel (\(l,_) -> (l,ix)) tp in
                                

                   go tp = case next tp of
                             Nothing -> firstChild tp
                             Just tpN -> go tpN

labelTree (Node a xs) (y:ys) = let (xs',ys') = labelTree' xs ys
                                   n' = Node (a,y) xs'
                               in
                                   (n',xs')

labelTree' lst labs =