Solution (source code)

= Solution

Count each <data constructor> once, including each `Two`:

``
size :: Tree a -> Int
size (One _)   = 1
size (Two l r) = 1 + size l + size r
``

<Structural induction> verifies the count: a leaf contributes one; an internal node contributes itself and the disjoint occurrences in its two <subtrees>. Fully evaluating the result takes <linear time> in the number of nodes. This <type signature> uses machine `Int` as usual in the examination; `Integer` avoids overflow for arbitrarily large inputs.