6.4. Nesting Patterns

Patterns can be nested to an arbitrary depth. Lets sum up a list of trees:

treeSizeL :: [Tree a] -> Integer
treeSizeL []                 = 0
treeSizeL ((Branch b1 b2):t) = (treeSize b1 + treeSize b2) + treeSizeL t
treeSizeL ((Leaf l):t)       = 1 + treeSizeL t
treeSizeL (_:t)              = treeSizeL t