Solution (source code)

= Solution

A <tree fold> first folds every child <rose tree>, then supplies the resulting <list> and the current label to the combining function:
``
foldRTree :: (a -> [b] -> b) -> RTree a -> b
foldRTree f (Node x children) =
  f x (map (foldRTree f) children)
``
The label type `a` and result type `b` are independent, so the <polymorphic type> needs no class constraint. With `f x ys = x + sum ys`, every label is counted exactly once; the illustrated labels sum to \b[28].

The printed source gives the signature `exampleRTree` but binds `exampleRTRee`, with different capitalization. They are different <Haskell> names; the demonstration requires using one spelling consistently. This typo does not affect the <tree fold> definition.