# Hutton 2016 ex8.3a

3 messages
Open this post in threaded view
|

## Hutton 2016 ex8.3a

 Givendata Tree a = Leaf a | Node (Tree a) (Tree a)Write a leaf counter.Hutton suggests:leaves :: Tree a -> Intleaves (Leaf _) = 1leaves (Node l r) = leaves l + leaves rI tried:leavesTrent :: Tree a -> IntleavesTrent = leaves' 0         where           leaves' n (Leaf a) = n + 1           leaves' n (Node l r) = (leaves' n l), (leaves' n r)The idea is:If it is a leaf, add one to the accumulator.  (Following Hutton's explanation of how sum works if defined with foldl.)   If it is a tree, proceed down the left subtree recursively, until you get to a leaf, then roll up to the right subtree.  The problem (among the problems) is that I don't know how to tell the compiler to do all lefts, before backing up to go right.  I only know how to do that using a real operator like "+" or foo (l, r).Is that kind of no-op recursive branching possible?Trent. _______________________________________________ Beginners mailing list [hidden email] http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners