enum Tree { case Empty indirect case Node(T, Tree, Tree) func map(f : T -> U) -> Tree { switch(self) { case .Empty : return .Empty case let .Node(x, l, r): return .Node(f(x), l.map(f), r.map(f)) } } }