data Node k = Leaf { key :: k }
| Branch { key :: k, left :: Node k, right :: Node k }
(vollst.) Fallunterscheidung nach den Konstruktoren:
children :: Node k -> [ Node k ]
children = \ n -> case n of
Branch {} -> [ left n, right n ]
Leaf {} -> [ ]
alternative Schreibweise: pattern matching
children = \ n -> case n of
Branch { left = l, right = r } -> [ l, r ]
Leaf { } -> [ ]