data Node = Node Char [Node] deriving(Eq)
nodeA = Node 'A' [nodeB, nodeC, nodeD]
nodeB = Node 'B' []
nodeC = Node 'C' [nodeE, nodeF]
nodeD = Node 'D' []
nodeE = Node 'E' [nodeB]
nodeF = Node 'F' [nodeA]
deepTraverse :: Node -> [Char]
deepTraverse (Node c []) = [c]
deepTraverse (Node c ns) = c:(map (\(Node cl nsl)->cl) (buildNodeList (Node c ns) ns))
where lssToLs lss = foldr (++) [] lss
buildNodeList nw nsw = lssToLs (map (\(Node cl nsl)->(if (Node cl nsl) == nw then [(Node cl nsl)]
else ((Node cl nsl):(buildNodeList nw nsl)))) nsw)
main :: IO()
main = putStrLn (show (deepTraverse nodeA))
Whenever I call deepTraverse nodeA
it loops gets hung up. In ghci it does spit out:
Main*> "ABCEBF
Leading me to suspect the "then" part of the if. I have been banging my head against this problem for a while, any help would be appreciated.