On a side note, Swift's enum provides complete support for sum type.
class Box<T> {
var contents : T
init(_ initialContents : T) {
contents = initialContents
}
}
enum BinaryTree {
case Leaf
case Branch(Box<BinaryTree>, Box<BinaryTree>)
}