
t =Leaf "1"
treeGrower :: Tree String-> Tree String treeGrower (Leaf a )= treeGrower (Fork (Leaf (a++"1")) (Leaf (a++"2"))) treeGrower (Fork l r) = Fork (treeGrower l) (treeGrower r)
data Tree a = Fork (Tree a) (Tree a) | Leaf a deriving Show
inf=treeGrower t
Welcome to Haskell programming - you've hit your first bottom. As a previous email noted, the type of tree grower could as well be expressed as treeGrower :: Tree String -> Tree a This is because the tree is infinite (every time you generate tree with leaves you apply treeGrower to it again), and as such has no reachable leaves, only leaves contain typed data this tree cannot be typed. While you could prune this tree to a given level, the leaves on the pruned tree would not be from the grown tree (as they cannot be reached), but generated by the pruning function. (It might make more sense if the forks were labelled too, it depends on what you are trying to do).
I'd like to prune it to a level to have a show of a piece like piece= prune 5 inf
How prune is to be coded ?? Thanks Paolino
Because no data is passed in the infinite tree I've added a base name to the prune function (this is just off the top of my head no gurantees it will run) prune :: String -> Integer -> Tree a -> Tree String prune s 0 x = Leaf s -- make cut, pass name to generated leaf prune s d (Leaf n) = Leaf n -- leave leaf, not necessary for infite tree prune s d (Fork b1 b2) = Branch (prune (s++"R") (d-1) b1) (prune (s++"L") (d-1) b2) -- last case does the work of generating labels you might use: prune "" 5 inf Although it would be more direct to add a depth control to tree grower. C